From 5e70a25116f4b7355e3995a74e586da7832dff39 Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Wed, 14 May 2008 14:10:39 -0700 Subject: 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) --- source3/winbindd/winbindd_dual.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'source3/winbindd') 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]); -- cgit