summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndreas Schneider <asn@samba.org>2012-09-27 19:01:15 +0200
committerKarolin Seeger <kseeger@samba.org>2012-10-02 09:04:55 +0200
commit3d3acf04da37d99aceb4759849a42a8ecae2333f (patch)
tree4003bed94ca75e213cefc5082c5407cdd66a9f15
parentb74ed1511753bd9b51c91a02e0cb4ea42e3ea37e (diff)
downloadsamba-3d3acf04da37d99aceb4759849a42a8ecae2333f.tar.gz
s3fs-smbd: Move housekeeping to the background process.
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. (cherry picked from commit aa6a7a97803b1106d2200c889a2260f81059c450) Signed-off-by: Andreas Schneider <asn@samba.org> Fix bug #9231 - NT_STATUS_IO_TIMEOUT during slow import of printers into registry.
-rw-r--r--source3/printing/queue_process.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/source3/printing/queue_process.c b/source3/printing/queue_process.c
index cf3becda30b..3d142dd7693 100644
--- a/source3/printing/queue_process.c
+++ b/source3/printing/queue_process.c
@@ -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);
}