s3fs-smbd: Move housekeeping to the background process.
authorAndreas Schneider <asn@samba.org>
Thu, 27 Sep 2012 17:01:15 +0000 (19:01 +0200)
committerAndreas Schneider <asn@cryptomilk.org>
Mon, 1 Oct 2012 18:28:23 +0000 (20:28 +0200)
If you add 200 printers using lpadmin. Then you wait for the printcap
cache to expire. As soon as this expires we notify all deamons that they
should reload the printers. This mean we need to create the default
registry keys for each printer. If you do e.g. a 'smbclient -L' during
that time you will get a lot of timeouts.

This lets the housekeeping function of the printcap cache do the task of
creating the default registry keys in background queue process. When it is done
with the task it will tell all smbd childs to reload the printers and the 200
printers appear.

Autobuild-User(master): Andreas Schneider <asn@cryptomilk.org>
Autobuild-Date(master): Mon Oct  1 20:28:23 CEST 2012 on sn-devel-104

source3/printing/queue_process.c

index cf3becda30be2270745bc732a76f56ca92d1e8f3..3d142dd7693d93c38e54822735834e2cf7c7befa 100644 (file)
@@ -41,6 +41,15 @@ extern pid_t start_spoolssd(struct event_context *ev_ctx,
 static void reload_pcap_change_notify(struct tevent_context *ev,
                               struct messaging_context *msg_ctx)
 {
+       /*
+        * Reload the printers first in the background process so that
+        * newly added printers get default values created in the registry.
+        *
+        * This will block the process for some time (~1 sec per printer), but
+        * it doesn't block smbd's servering clients.
+        */
+       delete_and_reload_printers(ev, msg_ctx);
+
        message_send_all(msg_ctx, MSG_PRINTER_PCAP, NULL, 0, NULL);
 }