diff options
author | Jeremy Allison <jra@samba.org> | 2008-05-14 14:10:39 -0700 |
---|---|---|
committer | Jeremy Allison <jra@samba.org> | 2008-05-14 14:10:39 -0700 |
commit | 5e70a25116f4b7355e3995a74e586da7832dff39 (patch) | |
tree | f78997fff24674ea6b6e4583a65ba1c9c2d43f2d /source3 | |
parent | 96ef630ba33f23125b2d7c6c2fa74b524f285c1e (diff) | |
download | samba-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')
-rw-r--r-- | source3/winbindd/winbindd_dual.c | 6 |
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]); |