From cc51e85f0aa49aad529eca5711fdc34f95bfe6d8 Mon Sep 17 00:00:00 2001 From: Volker Lendecke Date: Mon, 18 May 2015 13:15:35 +0200 Subject: messaging: Register a tevent context for secondary dgm refs When a secondary messaging context is initialized, we need to register its tevent context with the lower level dgm context. Seen when using smbstatus with clustering. The TALLOC_FREE(r->tevent_handle) in the destructor might not be necessary, but I want to free the tevent reference before the context goes away. Signed-off-by: Volker Lendecke Reviewed-by: Stefan Metzmacher --- source3/lib/messages_dgm_ref.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'source3/lib') diff --git a/source3/lib/messages_dgm_ref.c b/source3/lib/messages_dgm_ref.c index 32b9c985296..b4511e00603 100644 --- a/source3/lib/messages_dgm_ref.c +++ b/source3/lib/messages_dgm_ref.c @@ -26,6 +26,7 @@ struct msg_dgm_ref { struct msg_dgm_ref *prev, *next; + void *tevent_handle; void (*recv_cb)(const uint8_t *msg, size_t msg_len, int *fds, size_t num_fds, void *private_data); void *recv_cb_private_data; @@ -55,6 +56,7 @@ void *messaging_dgm_ref(TALLOC_CTX *mem_ctx, struct tevent_context *ev, *err = ENOMEM; return NULL; } + result->tevent_handle = NULL; tmp_refs = refs; @@ -79,6 +81,14 @@ void *messaging_dgm_ref(TALLOC_CTX *mem_ctx, struct tevent_context *ev, return NULL; } dgm_pid = getpid(); + } else { + result->tevent_handle = messaging_dgm_register_tevent_context( + result, ev); + if (result->tevent_handle == NULL) { + TALLOC_FREE(result); + *err = ENOMEM; + return NULL; + } } refs = tmp_refs; @@ -114,6 +124,8 @@ static int msg_dgm_ref_destructor(struct msg_dgm_ref *r) } DLIST_REMOVE(refs, r); + TALLOC_FREE(r->tevent_handle); + if (refs == NULL) { messaging_dgm_destroy(); } -- cgit v1.2.1