From 38e43be7b89673282f8853ffedf726d84ef5ce30 Mon Sep 17 00:00:00 2001 From: Stefan Metzmacher Date: Tue, 27 Sep 2005 12:54:08 +0000 Subject: r10537: - we now use a much nicer way to handle talloc_free(timed_event) the events code replaces a destructor to one that returns allways -1 while it's calling the event handler - we don't need the composite and winsrepl specific fixes any more - this also fixes the problem with smbcli, dcerpc, cldap, ldap and nbt request timeouts metze (This used to be commit 495996cfc49a1c6eefde6ff04fc75e0739be3aab) --- source4/lib/events/events_standard.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) (limited to 'source4/lib/events/events_standard.c') diff --git a/source4/lib/events/events_standard.c b/source4/lib/events/events_standard.c index 810e8bbca3..8fe8d009bf 100644 --- a/source4/lib/events/events_standard.c +++ b/source4/lib/events/events_standard.c @@ -284,6 +284,11 @@ static int std_event_timed_destructor(void *ptr) return 0; } +static int std_event_timed_deny_destructor(void *ptr) +{ + return -1; +} + /* add a timed event return NULL on failure (memory allocation error) @@ -340,17 +345,12 @@ static void std_event_loop_timer(struct event_context *ev) return; } - te->next_event = timeval_zero(); - + /* deny the handler to free the event */ + talloc_set_destructor(te, std_event_timed_deny_destructor); te->handler(ev, te, t, te->private_data); - /* note the care taken to prevent referencing a event - that could have been freed by the handler */ - if (std_ev->timed_events) { - if (timeval_is_zero(&std_ev->timed_events->next_event)) { - talloc_free(te); - } - } + talloc_set_destructor(te, std_event_timed_destructor); + talloc_free(te); } #if WITH_EPOLL -- cgit