r1557: Add sigchld handling to winbindd. Next step is to have the child restarted if
authorRichard Sharpe <sharpe@samba.org>
Wed, 21 Jul 2004 04:24:30 +0000 (04:24 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 15:52:14 +0000 (10:52 -0500)
need be. We should also make sure the main line know we no longer have a child.
(This used to be commit e3dc7934b50c8578d70fc01688a07bd369a7cf30)

source3/nsswitch/winbindd.c

index 50b6f0a87fb2c0d03aa2d85c63f430e2fff5ea52..d08aa84face0263c02dac35161b0a35c784db0cd 100644 (file)
@@ -188,6 +188,17 @@ static void sighup_handler(int signum)
        sys_select_signal();
 }
 
+static void sigchld_handler(int signum)
+{
+       pid_t pid;
+       int status;
+
+       while ((pid = wait(&status)) != -1 || errno == EINTR) {
+               continue; /* Reap children */
+       }
+       sys_select_signal();
+}
+
 /* React on 'smbcontrol winbindd reload-config' in the same way as on SIGHUP*/
 static void msg_reload_services(int msg_type, pid_t src, void *buf, size_t len)
 {
@@ -888,12 +899,14 @@ int main(int argc, char **argv)
        BlockSignals(False, SIGUSR1);
        BlockSignals(False, SIGUSR2);
        BlockSignals(False, SIGHUP);
+       BlockSignals(False, SIGCHLD);
 
        /* Setup signal handlers */
        
        CatchSignal(SIGINT, termination_handler);      /* Exit on these sigs */
        CatchSignal(SIGQUIT, termination_handler);
        CatchSignal(SIGTERM, termination_handler);
+       CatchSignal(SIGCHLD, sigchld_handler);
 
        CatchSignal(SIGPIPE, SIG_IGN);                 /* Ignore sigpipe */