summaryrefslogtreecommitdiff
path: root/source3/winbindd/winbindd_dual.c
diff options
context:
space:
mode:
Diffstat (limited to 'source3/winbindd/winbindd_dual.c')
-rw-r--r--source3/winbindd/winbindd_dual.c12
1 files changed, 8 insertions, 4 deletions
diff --git a/source3/winbindd/winbindd_dual.c b/source3/winbindd/winbindd_dual.c
index cc9d6de21d..cdf53d0ac2 100644
--- a/source3/winbindd/winbindd_dual.c
+++ b/source3/winbindd/winbindd_dual.c
@@ -138,7 +138,7 @@ static void wb_child_request_trigger(struct tevent_req *req,
req, struct wb_child_request_state);
struct tevent_req *subreq;
- if ((state->child->pid == 0) && (!fork_domain_child(state->child))) {
+ if ((state->child->sock == -1) && (!fork_domain_child(state->child))) {
tevent_req_error(req, errno);
return;
}
@@ -168,6 +168,12 @@ static void wb_child_request_done(struct tevent_req *subreq)
ret = wb_simple_trans_recv(subreq, state, &state->response, &err);
TALLOC_FREE(subreq);
if (ret == -1) {
+ /*
+ * The basic parent/child communication broke, close
+ * our socket
+ */
+ close(state->child->sock);
+ state->child->sock = -1;
tevent_req_error(req, err);
return;
}
@@ -437,6 +443,7 @@ void setup_child(struct winbindd_domain *domain, struct winbindd_child *child,
"logname == NULL");
}
+ child->sock = -1;
child->domain = domain;
child->table = table;
child->queue = tevent_queue_create(NULL, "winbind_child");
@@ -465,9 +472,6 @@ void winbind_child_died(pid_t pid)
/* This will be re-added in fork_domain_child() */
DLIST_REMOVE(winbindd_children, child);
-
- close(child->sock);
- child->sock = -1;
child->pid = 0;
}