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_liboop.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) (limited to 'source4/lib/events/events_liboop.c') diff --git a/source4/lib/events/events_liboop.c b/source4/lib/events/events_liboop.c index ad7c43cd4e..54cb8d5a52 100644 --- a/source4/lib/events/events_liboop.c +++ b/source4/lib/events/events_liboop.c @@ -172,12 +172,23 @@ static void oop_event_set_fd_flags(struct fd_event *fde, uint16_t flags) fde->flags = flags; } +static int oop_event_timed_destructor(void *ptr); +static int oop_event_timed_deny_destructor(void *ptr) +{ + return -1; +} + static void *oop_event_timed_handler(oop_source *oop, struct timeval t, void *ptr) { struct timed_event *te = ptr; + /* deny the handler to free the event */ + talloc_set_destructor(te, oop_event_timed_deny_destructor); te->handler(te->event_ctx, te, t, te->private_data); + talloc_set_destructor(te, oop_event_timed_destructor); + talloc_free(te); + return OOP_CONTINUE; } @@ -218,7 +229,7 @@ static struct timed_event *oop_event_add_timed(struct event_context *ev, TALLOC_ te->private_data = private_data; te->additional_data = NULL; - oop->cancel_time(oop, te->next_event, oop_event_timed_handler, te); + oop->on_time(oop, te->next_event, oop_event_timed_handler, te); talloc_set_destructor(te, oop_event_timed_destructor); -- cgit