diff options
author | Andrew Tridgell <tridge@samba.org> | 2007-05-14 00:57:48 +0000 |
---|---|---|
committer | Gerald (Jerry) Carter <jerry@samba.org> | 2007-10-10 14:52:21 -0500 |
commit | ecc54f900fa6aaf1b97ef85b1101cf7badf33cec (patch) | |
tree | 4985d6817c5b8e052fb4e0a3946a638697b602a0 /source4/lib/events/events.c | |
parent | bc02bba4499b7f6c78dc5db0610fe4f4d238829a (diff) | |
download | samba-ecc54f900fa6aaf1b97ef85b1101cf7badf33cec.tar.gz samba-ecc54f900fa6aaf1b97ef85b1101cf7badf33cec.tar.bz2 samba-ecc54f900fa6aaf1b97ef85b1101cf7badf33cec.zip |
r22830: merged the latest lib/events updates from ctdb to Samba4. This
includes a new EVENT_FD_AUTOCLOSE flag that prevents race conditions
where code using fd events might close a fd before releasing the
struct fd_event. That causes headaches for epoll.
(This used to be commit f1ad216de13b154a1f8747a44b0970dcc47a784a)
Diffstat (limited to 'source4/lib/events/events.c')
-rw-r--r-- | source4/lib/events/events.c | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/source4/lib/events/events.c b/source4/lib/events/events.c index 3a81b55bd9..5b36e70ac0 100644 --- a/source4/lib/events/events.c +++ b/source4/lib/events/events.c @@ -71,6 +71,8 @@ struct event_ops_list { /* list of registered event backends */ static struct event_ops_list *event_backends; +static char *event_default_backend = NULL; + /* register an events backend */ @@ -86,6 +88,15 @@ bool event_register_backend(const char *name, const struct event_ops *ops) } /* + set the default event backend + */ +void event_set_default_backend(const char *backend) +{ + if (event_default_backend) free(event_default_backend); + event_default_backend = strdup(backend); +} + +/* initialise backends if not already done */ static void event_backend_init(void) @@ -99,7 +110,15 @@ static void event_backend_init(void) run_init_functions(shared_init); #else bool events_standard_init(void); + bool events_select_init(void); + events_select_init(); events_standard_init(); +#if HAVE_EVENTS_EPOLL + { + bool events_epoll_init(void); + events_epoll_init(); + } +#endif #endif } @@ -170,6 +189,9 @@ struct event_context *event_context_init_byname(TALLOC_CTX *mem_ctx, const char } #endif if (name == NULL) { + name = event_default_backend; + } + if (name == NULL) { name = "standard"; } @@ -195,6 +217,9 @@ struct event_context *event_context_init(TALLOC_CTX *mem_ctx) /* add a fd based event return NULL on failure (memory allocation error) + + if flags contains EVENT_FD_AUTOCLOSE then the fd will be closed when + the returned fd_event context is freed */ struct fd_event *event_add_fd(struct event_context *ev, TALLOC_CTX *mem_ctx, int fd, uint16_t flags, event_fd_handler_t handler, |