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

Reply via email to