summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeremy Allison <jra@samba.org>2008-05-14 14:10:39 -0700
committerJeremy Allison <jra@samba.org>2008-05-14 14:10:39 -0700
commit5e70a25116f4b7355e3995a74e586da7832dff39 (patch)
treef78997fff24674ea6b6e4583a65ba1c9c2d43f2d
parent96ef630ba33f23125b2d7c6c2fa74b524f285c1e (diff)
downloadsamba-5e70a25116f4b7355e3995a74e586da7832dff39.tar.gz
samba-5e70a25116f4b7355e3995a74e586da7832dff39.tar.bz2
samba-5e70a25116f4b7355e3995a74e586da7832dff39.zip
Fix bug #5464. Pointed out by Herb @ Connectathon. In fork_domain_child() we call :
CatchChild(); *before* we fork the domain child. This call establishes a signal handler that eats SIGCLD signals and doesn't call sys_select_signal() as the main daemon SIGCLD handler should do. This causes the parent to ignore dead children and time out, instead of calling winbind_child_died() on receipt of the signal. The correct fix is to move the CatchChild call into the child code after the fork. Jeremy. (This used to be commit 8d701a142be2b75dc30ad215bc178af902eb4af9)
-rw-r--r--source3/winbindd/winbindd_dual.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/source3/winbindd/winbindd_dual.c b/source3/winbindd/winbindd_dual.c
index 1d741be79e..d46580155c 100644
--- a/source3/winbindd/winbindd_dual.c
+++ b/source3/winbindd/winbindd_dual.c
@@ -982,9 +982,6 @@ static bool fork_domain_child(struct winbindd_child *child)
ZERO_STRUCT(state);
state.pid = sys_getpid();
- /* Stop zombies */
- CatchChild();
-
child->pid = sys_fork();
if (child->pid == -1) {
@@ -1006,6 +1003,9 @@ static bool fork_domain_child(struct winbindd_child *child)
/* Child */
+ /* Stop zombies in children */
+ CatchChild();
+
state.sock = fdpair[0];
close(fdpair[1]);