summaryrefslogtreecommitdiff
path: root/source3/winbindd
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 /source3/winbindd
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)
Diffstat (limited to 'source3/winbindd')
-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]);