summaryrefslogtreecommitdiff
path: root/source3/printing/pcap.c
diff options
context:
space:
mode:
Diffstat (limited to 'source3/printing/pcap.c')
-rw-r--r--source3/printing/pcap.c17
1 files changed, 15 insertions, 2 deletions
diff --git a/source3/printing/pcap.c b/source3/printing/pcap.c
index 1b8f46d8e7..be267bd116 100644
--- a/source3/printing/pcap.c
+++ b/source3/printing/pcap.c
@@ -107,11 +107,14 @@ void pcap_cache_replace(const struct pcap_cache *pcache)
}
void pcap_cache_reload(struct tevent_context *ev,
- struct messaging_context *msg_ctx)
+ struct messaging_context *msg_ctx,
+ void (*post_cache_fill_fn)(struct tevent_context *,
+ struct messaging_context *))
{
const char *pcap_name = lp_printcapname();
bool pcap_reloaded = False;
NTSTATUS status;
+ bool post_cache_fill_fn_handled = false;
DEBUG(3, ("reloading printcap cache\n"));
@@ -135,7 +138,13 @@ void pcap_cache_reload(struct tevent_context *ev,
#ifdef HAVE_CUPS
if (strequal(pcap_name, "cups")) {
- pcap_reloaded = cups_cache_reload(ev, msg_ctx);
+ pcap_reloaded = cups_cache_reload(ev, msg_ctx,
+ post_cache_fill_fn);
+ /*
+ * cups_cache_reload() is async and calls post_cache_fill_fn()
+ * on successful completion
+ */
+ post_cache_fill_fn_handled = true;
goto done;
}
#endif
@@ -174,6 +183,10 @@ done:
if (!NT_STATUS_IS_OK(status)) {
DEBUG(0, ("Failed to cleanup printer list!\n"));
}
+ if ((post_cache_fill_fn_handled == false)
+ && (post_cache_fill_fn != NULL)) {
+ post_cache_fill_fn(ev, msg_ctx);
+ }
}
return;