diff options
author | Volker Lendecke <vl@samba.org> | 2015-05-18 13:15:35 +0200 |
---|---|---|
committer | Volker Lendecke <vl@samba.org> | 2015-05-28 11:13:09 +0200 |
commit | cc51e85f0aa49aad529eca5711fdc34f95bfe6d8 (patch) | |
tree | b16b652def7e704116a319a86f2ee5633027915a /source3/lib | |
parent | 586a95948029ce0491f05dfba67c986085adbb55 (diff) | |
download | samba-cc51e85f0aa49aad529eca5711fdc34f95bfe6d8.tar.gz |
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 <vl@samba.org>
Reviewed-by: Stefan Metzmacher <metze@samba.org>
Diffstat (limited to 'source3/lib')
-rw-r--r-- | source3/lib/messages_dgm_ref.c | 12 |
1 files changed, 12 insertions, 0 deletions
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(); } |