summaryrefslogtreecommitdiff
path: root/lib/tevent
diff options
context:
space:
mode:
authorAndrew Tridgell <tridge@samba.org>2010-03-26 21:13:27 +1100
committerAndrew Tridgell <tridge@samba.org>2010-03-26 21:13:27 +1100
commit5609c504337b79fd6f521c42b414c650b23d0c9a (patch)
tree114e356f3f60c2abb73fadcf42593a389100bb8e /lib/tevent
parent525a4fb2c423dbbeeb1e6da3254f334044b7bd7f (diff)
downloadsamba-5609c504337b79fd6f521c42b414c650b23d0c9a.tar.gz
samba-5609c504337b79fd6f521c42b414c650b23d0c9a.tar.bz2
samba-5609c504337b79fd6f521c42b414c650b23d0c9a.zip
tevent: added tevent_re_initialise()
This allows us to re-initialise a tevent context without destroying the pointer. That means that if someone keeps a long term ptr to the event context across a fork it will still work. This also brings the memory handling in single and standard process models much closer together, which means less bugs that we don't find with make test.
Diffstat (limited to 'lib/tevent')
-rw-r--r--lib/tevent/tevent.c15
-rw-r--r--lib/tevent/tevent.h2
2 files changed, 17 insertions, 0 deletions
diff --git a/lib/tevent/tevent.c b/lib/tevent/tevent.c
index a0ee208663..ceae534c9b 100644
--- a/lib/tevent/tevent.c
+++ b/lib/tevent/tevent.c
@@ -616,3 +616,18 @@ int _tevent_loop_wait(struct tevent_context *ev, const char *location)
{
return ev->ops->loop_wait(ev, location);
}
+
+
+/*
+ re-initialise a tevent context. This leaves you with the same
+ event context, but all events are wiped and the structure is
+ re-initialised. This is most useful after a fork()
+
+ zero is returned on success, non-zero on failure
+*/
+int tevent_re_initialise(struct tevent_context *ev)
+{
+ tevent_common_context_destructor(ev);
+
+ return ev->ops->context_init(ev);
+}
diff --git a/lib/tevent/tevent.h b/lib/tevent/tevent.h
index e318a4bf1d..ad1f2c9cc3 100644
--- a/lib/tevent/tevent.h
+++ b/lib/tevent/tevent.h
@@ -366,6 +366,8 @@ int _tevent_loop_until(struct tevent_context *ev,
_tevent_loop_until(ev, finished, private_data, __location__)
#endif
+int tevent_re_initialise(struct tevent_context *ev);
+
/**
* The following structure and registration functions are exclusively