diff options
Diffstat (limited to 'source3/printing/queue_process.c')
-rw-r--r-- | source3/printing/queue_process.c | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/source3/printing/queue_process.c b/source3/printing/queue_process.c index a56baaf6b7..1b7b4f8579 100644 --- a/source3/printing/queue_process.c +++ b/source3/printing/queue_process.c @@ -191,8 +191,24 @@ pid_t start_background_queue(struct tevent_context *ev, exit(1); } + /* + * Block signals before forking child as it will have to + * set its own handlers. Child will re-enable SIGHUP as + * soon as the handlers are set up. + */ + BlockSignals(true, SIGTERM); + BlockSignals(true, SIGHUP); + pid = sys_fork(); + /* parent or error */ + if (pid != 0) { + /* Re-enable SIGHUP before returnig */ + BlockSignals(false, SIGTERM); + BlockSignals(false, SIGHUP); + return pid; + } + if (pid == -1) { DEBUG(5,("start_background_queue: background LPQ thread failed to start. %s\n", strerror(errno) )); exit(1); @@ -220,6 +236,9 @@ pid_t start_background_queue(struct tevent_context *ev, bq_setup_sig_term_handler(); bq_setup_sig_hup_handler(ev, msg_ctx); + BlockSignals(false, SIGTERM); + BlockSignals(false, SIGHUP); + if (!pcap_cache_loaded()) { pcap_cache_reload(ev, msg_ctx, &reload_printers); } |