The branch, v3-2-stable has been updated via 32dcaab09e893c9a33629dccc5103ad67e8231fd (commit) via 7e4b110c88153150babdb220683a1b8441f067bd (commit) from 1e7c488097d67457632778a09e7f82db5d0e93e3 (commit)
http://gitweb.samba.org/?p=samba.git;a=shortlog;h=v3-2-stable - Log ----------------------------------------------------------------- commit 32dcaab09e893c9a33629dccc5103ad67e8231fd Author: Karolin Seeger <[EMAIL PROTECTED]> Date: Wed Dec 10 09:28:49 2008 +0100 WHATSNEW: Update changes. Karolin (cherry picked from commit 760de2d48940ed88aca1fa459e4af455b541940c) commit 7e4b110c88153150babdb220683a1b8441f067bd Author: SATOH Fumiyasu <[EMAIL PROTECTED]> Date: Tue Dec 9 14:26:39 2008 -0800 Fix bug #5688 LPQ process is orphaned if socket address parameter is invalid Karolin please pull for 3-2-stable. Jeremy (cherry picked from commit 5dfccee083490eea8230a5965cb52b01ddf5041e) ----------------------------------------------------------------------- Summary of changes: WHATSNEW.txt | 3 +++ source/printing/printing.c | 39 +++++++++++++++++++++++++++++++++------ 2 files changed, 36 insertions(+), 6 deletions(-) Changeset truncated at 500 lines: diff --git a/WHATSNEW.txt b/WHATSNEW.txt index 769ae24..447844b 100644 --- a/WHATSNEW.txt +++ b/WHATSNEW.txt @@ -10,7 +10,10 @@ Major enhancements included in Samba 3.2.6 are: o Fix Winbind crash bugs. o Fix moving of readonly files. + o Fix "write list" in setups using "security = share". o Fix access to cups-printers with cups 1.3.4. + o Fix timeouts in setups with large groups. + o Fix several bugs concerning Alternate Data Streams. o Add new SMB traffic analyzer VFS module. diff --git a/source/printing/printing.c b/source/printing/printing.c index af89852..9bd237c 100644 --- a/source/printing/printing.c +++ b/source/printing/printing.c @@ -1394,7 +1394,19 @@ main thread of the background lpq updater ****************************************************************************/ void start_background_queue(void) { + /* Use local variables for this as we don't + * need to save the parent side of this, just + * ensure it closes when the process exits. + */ + int pause_pipe[2]; + DEBUG(3,("start_background_queue: Starting background LPQ thread\n")); + + if (pipe(pause_pipe) == -1) { + DEBUG(5,("start_background_queue: cannot create pipe. %s\n", strerror(errno) )); + exit(1); + } + background_lpq_updater_pid = sys_fork(); if (background_lpq_updater_pid == -1) { @@ -1406,6 +1418,9 @@ void start_background_queue(void) /* Child. */ DEBUG(5,("start_background_queue: background LPQ thread started\n")); + close(pause_pipe[0]); + pause_pipe[0] = -1; + if (!reinit_after_fork(smbd_messaging_context(), true)) { DEBUG(0,("reinit_after_fork() failed\n")); smb_panic("reinit_after_fork() failed"); @@ -1420,13 +1435,23 @@ void start_background_queue(void) messaging_register(smbd_messaging_context(), NULL, MSG_PRINTER_UPDATE, print_queue_receive); - + DEBUG(5,("start_background_queue: background LPQ thread waiting for messages\n")); while (1) { - pause(); - + fd_set pause_fds; + int pause_select; + + FD_ZERO(&pause_fds); + FD_SET(pause_pipe[1], &pause_fds); + pause_select = sys_select(pause_pipe[1]+1, &pause_fds, NULL, NULL, NULL); + /* If pause_pipe[0] is closed it means the parent smbd + * and children exited or aborted. */ + if (pause_select == 1) { + exit_server_cleanly(NULL); + } + /* check for some essential signals first */ - + if (got_sig_term) { exit_server_cleanly(NULL); } @@ -1437,9 +1462,9 @@ void start_background_queue(void) reload_services(False); reload_after_sighup = 0; } - + /* now check for messages */ - + DEBUG(10,("start_background_queue: background LPQ thread got a message\n")); message_dispatch(smbd_messaging_context()); @@ -1449,6 +1474,8 @@ void start_background_queue(void) 0); } } + + close(pause_pipe[1]); } /**************************************************************************** -- Samba Shared Repository