summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source4/rpc_server/dcerpc_server.c4
-rw-r--r--source4/rpc_server/dcerpc_server.h1
-rw-r--r--source4/rpc_server/handles.c4
3 files changed, 6 insertions, 3 deletions
diff --git a/source4/rpc_server/dcerpc_server.c b/source4/rpc_server/dcerpc_server.c
index a17910e1d5..2d448f61de 100644
--- a/source4/rpc_server/dcerpc_server.c
+++ b/source4/rpc_server/dcerpc_server.c
@@ -315,9 +315,7 @@ void dcesrv_endpoint_disconnect(struct dcesrv_connection *p)
/* destroy any handles */
while (p->handles) {
- TALLOC_CTX *m = p->handles->mem_ctx;
- DLIST_REMOVE(p->handles, p->handles);
- talloc_destroy(m);
+ dcesrv_handle_destroy(p, p->handles);
}
talloc_destroy(p->mem_ctx);
diff --git a/source4/rpc_server/dcerpc_server.h b/source4/rpc_server/dcerpc_server.h
index 08f3178689..c2bbe8073a 100644
--- a/source4/rpc_server/dcerpc_server.h
+++ b/source4/rpc_server/dcerpc_server.h
@@ -86,6 +86,7 @@ struct dcesrv_handle {
struct policy_handle wire_handle;
TALLOC_CTX *mem_ctx;
void *data;
+ void (*destroy)(struct dcesrv_connection *, struct dcesrv_handle *);
};
/* hold the authentication state information */
diff --git a/source4/rpc_server/handles.c b/source4/rpc_server/handles.c
index 043318c075..df6abd65a5 100644
--- a/source4/rpc_server/handles.c
+++ b/source4/rpc_server/handles.c
@@ -42,6 +42,7 @@ struct dcesrv_handle *dcesrv_handle_new(struct dcesrv_connection *dce_conn,
}
h->mem_ctx = mem_ctx;
h->data = NULL;
+ h->destroy = NULL;
h->wire_handle.handle_type = handle_type;
uuid_generate_random(&h->wire_handle.uuid);
@@ -57,6 +58,9 @@ struct dcesrv_handle *dcesrv_handle_new(struct dcesrv_connection *dce_conn,
void dcesrv_handle_destroy(struct dcesrv_connection *dce_conn,
struct dcesrv_handle *h)
{
+ if (h->destroy) {
+ h->destroy(dce_conn, h);
+ }
DLIST_REMOVE(dce_conn->handles, h);
talloc_destroy(h->mem_ctx);
}