summaryrefslogtreecommitdiff
path: root/source4/lib/events/events_standard.c
diff options
context:
space:
mode:
authorStefan Metzmacher <metze@samba.org>2005-09-27 12:54:08 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 13:39:03 -0500
commit38e43be7b89673282f8853ffedf726d84ef5ce30 (patch)
tree033693360c0792b05791d418d505f7a367b2b16d /source4/lib/events/events_standard.c
parent82ae72a0cf0ee3aee89573d79f1baffda3612593 (diff)
downloadsamba-38e43be7b89673282f8853ffedf726d84ef5ce30.tar.gz
samba-38e43be7b89673282f8853ffedf726d84ef5ce30.tar.bz2
samba-38e43be7b89673282f8853ffedf726d84ef5ce30.zip
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)
Diffstat (limited to 'source4/lib/events/events_standard.c')
-rw-r--r--source4/lib/events/events_standard.c18
1 files changed, 9 insertions, 9 deletions
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