[SCM] Samba Shared Repository - branch v3-3-test updated - release-3-2-0pre2-4158-gd5c490d

Jeremy Allison jra at samba.org
Tue Sep 23 23:40:52 GMT 2008


The branch, v3-3-test has been updated
       via  d5c490d79024ee41544512f7968999a6b3a313dc (commit)
      from  86a0c271ef467810810d1adda982bbb0dc8b928e (commit)

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=v3-3-test


- Log -----------------------------------------------------------------
commit d5c490d79024ee41544512f7968999a6b3a313dc
Author: Jeremy Allison <jra at samba.org>
Date:   Tue Sep 23 16:40:16 2008 -0700

    Fix winbindd crash in an unusual failure mode. Bug #5737. Based on original patch from shargagan at novell.com
    Jeremy.

-----------------------------------------------------------------------

Summary of changes:
 source/winbindd/winbindd_dual.c |   14 +++++++++-----
 1 files changed, 9 insertions(+), 5 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source/winbindd/winbindd_dual.c b/source/winbindd/winbindd_dual.c
index f3b277c..9e9a244 100644
--- a/source/winbindd/winbindd_dual.c
+++ b/source/winbindd/winbindd_dual.c
@@ -196,10 +196,12 @@ static void async_request_fail(struct winbindd_async_request *state)
 
 	TALLOC_FREE(state->reply_timeout_event);
 
-	SMB_ASSERT(state->child_pid != (pid_t)0);
+	/* If child exists and is not already reaped,
+	   send kill signal to child. */
 
-	/* If not already reaped, send kill signal to child. */
-	if (state->child->pid == state->child_pid) {
+	if ((state->child->pid != (pid_t)0) &&
+			(state->child->pid != (pid_t)-1) &&
+			(state->child->pid == state->child_pid)) {
 		kill(state->child_pid, SIGTERM);
 
 		/* 
@@ -295,12 +297,14 @@ static void schedule_async_request(struct winbindd_child *child)
 	}
 
 	if ((child->pid == 0) && (!fork_domain_child(child))) {
-		/* Cancel all outstanding requests */
+		/* fork_domain_child failed.
+		   Cancel all outstanding requests */
 
 		while (request != NULL) {
 			/* request might be free'd in the continuation */
 			struct winbindd_async_request *next = request->next;
-			request->continuation(request->private_data, False);
+
+			async_request_fail(request);
 			request = next;
 		}
 		return;


-- 
Samba Shared Repository


More information about the samba-cvs mailing list