r2710: continue with the new style of providing a parent context whenever
[samba.git] / source / rpc_server / dcerpc_server.c
index 9536fd68946364bde62b33b1bec6e1de607f6682..220c730790d931aadcfbb9f2b57e41aed72090c0 100644 (file)
@@ -268,6 +268,29 @@ NTSTATUS dcesrv_fetch_session_key(struct dcesrv_connection *p,
 }
 
 
+/*
+  destroy a link to an endpoint
+*/
+static int dcesrv_endpoint_destructor(void *ptr)
+{
+       struct dcesrv_connection *p = ptr;
+       if (p->iface) {
+               p->iface->unbind(p, p->iface);
+       }
+
+       /* destroy any handles */
+       while (p->handles) {
+               dcesrv_handle_destroy(p, p->handles);
+       }
+
+       if (p->auth_state.gensec_security) {
+               gensec_end(&p->auth_state.gensec_security);
+       }
+
+       return 0;
+}
+
+
 /*
   connect to a dcerpc endpoint
 */
@@ -294,6 +317,8 @@ NTSTATUS dcesrv_endpoint_connect(struct dcesrv_context *dce_ctx,
        (*p)->auth_state.session_key = dcesrv_generic_session_key;
        (*p)->srv_conn = NULL;
 
+       talloc_set_destructor(*p, dcesrv_endpoint_destructor);
+
        return NT_STATUS_OK;
 }
 
@@ -332,27 +357,6 @@ NTSTATUS dcesrv_endpoint_search_connect(struct dcesrv_context *dce_ctx,
 }
 
 
-/*
-  disconnect a link to an endpoint
-*/
-void dcesrv_endpoint_disconnect(struct dcesrv_connection *p)
-{
-       if (p->iface) {
-               p->iface->unbind(p, p->iface);
-       }
-
-       /* destroy any handles */
-       while (p->handles) {
-               dcesrv_handle_destroy(p, p->handles);
-       }
-
-       if (p->auth_state.gensec_security) {
-               gensec_end(&p->auth_state.gensec_security);
-       }
-
-       talloc_free(p);
-}
-
 static void dcesrv_init_hdr(struct dcerpc_packet *pkt)
 {
        pkt->rpc_vers = 5;