summaryrefslogtreecommitdiff
path: root/source4/ldap_server
diff options
context:
space:
mode:
authorStefan Metzmacher <metze@samba.org>2017-05-11 16:37:21 +0200
committerAndrew Bartlett <abartlet@samba.org>2017-06-15 09:13:22 +0200
commit82929a4bdd87f878db880c31317cca4305a65207 (patch)
tree01eea874fcc8f1e948667cfbce12f81cf7fb6943 /source4/ldap_server
parentace49db796a121bd35741e86e3e0aa98be48e81f (diff)
downloadsamba-82929a4bdd87f878db880c31317cca4305a65207.tar.gz
s4:ldap_server: introduce a ldapsrv_call_destructor()
This makes sure that a call doesn't become an stale member of the conn->pending_calls list. Signed-off-by: Stefan Metzmacher <metze@samba.org> Reviewed-by: Andrew Bartlett <abartlet@samba.org>
Diffstat (limited to 'source4/ldap_server')
-rw-r--r--source4/ldap_server/ldap_server.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/source4/ldap_server/ldap_server.c b/source4/ldap_server/ldap_server.c
index 347a17dde5a..062c3fc4b56 100644
--- a/source4/ldap_server/ldap_server.c
+++ b/source4/ldap_server/ldap_server.c
@@ -254,6 +254,18 @@ failed:
return -1;
}
+static int ldapsrv_call_destructor(struct ldapsrv_call *call)
+{
+ if (call->conn == NULL) {
+ return 0;
+ }
+
+ DLIST_REMOVE(call->conn->pending_calls, call);
+
+ call->conn = NULL;
+ return 0;
+}
+
static struct tevent_req *ldapsrv_process_call_send(TALLOC_CTX *mem_ctx,
struct tevent_context *ev,
struct tevent_queue *call_queue,
@@ -504,6 +516,7 @@ static void ldapsrv_call_read_done(struct tevent_req *subreq)
ldapsrv_terminate_connection(conn, "no memory");
return;
}
+ talloc_set_destructor(call, ldapsrv_call_destructor);
call->conn = conn;