From 3f8f99eaecf7a07126969594c41c00392b85cefd Mon Sep 17 00:00:00 2001 From: Stefan Metzmacher Date: Fri, 2 Jan 2009 12:06:39 +0100 Subject: s4:tevent: move event_context_find() to tevent_s4.c metze --- lib/tevent/tevent.c | 18 ------------------ 1 file changed, 18 deletions(-) (limited to 'lib/tevent/tevent.c') diff --git a/lib/tevent/tevent.c b/lib/tevent/tevent.c index e45a690c33..130bfaa665 100644 --- a/lib/tevent/tevent.c +++ b/lib/tevent/tevent.c @@ -290,21 +290,3 @@ int event_loop_wait(struct tevent_context *ev) { return ev->ops->loop_wait(ev); } - -/* - find an event context that is a parent of the given memory context, - or create a new event context as a child of the given context if - none is found - - This should be used in preference to event_context_init() in places - where you would prefer to use the existing event context if possible - (which is most situations) -*/ -struct tevent_context *event_context_find(TALLOC_CTX *mem_ctx) -{ - struct tevent_context *ev = talloc_find_parent_bytype(mem_ctx, struct tevent_context); - if (ev == NULL) { - ev = event_context_init(mem_ctx); - } - return ev; -} -- cgit From 8bdc947993dd29d0480675464d548134c6f71ea7 Mon Sep 17 00:00:00 2001 From: Stefan Metzmacher Date: Fri, 2 Jan 2009 11:17:00 +0100 Subject: tevent: rename event_set_default_backend() => tevent_set_default_backend() metze --- lib/tevent/tevent.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) (limited to 'lib/tevent/tevent.c') diff --git a/lib/tevent/tevent.c b/lib/tevent/tevent.c index 130bfaa665..94d71d490d 100644 --- a/lib/tevent/tevent.c +++ b/lib/tevent/tevent.c @@ -65,7 +65,7 @@ struct event_ops_list { /* list of registered event backends */ static struct event_ops_list *event_backends = NULL; -static char *event_default_backend = NULL; +static char *tevent_default_backend = NULL; /* register an events backend @@ -94,10 +94,11 @@ 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) +void tevent_set_default_backend(const char *backend) { - if (event_default_backend) free(event_default_backend); - event_default_backend = strdup(backend); + talloc_free(tevent_default_backend); + tevent_default_backend = talloc_strdup(talloc_autofree_context(), + backend); } /* @@ -177,7 +178,7 @@ struct tevent_context *event_context_init_byname(TALLOC_CTX *mem_ctx, const char event_backend_init(); if (name == NULL) { - name = event_default_backend; + name = tevent_default_backend; } if (name == NULL) { name = "standard"; -- cgit From d33b6aeff3ff0220c16211936043934cfa3ec71b Mon Sep 17 00:00:00 2001 From: Stefan Metzmacher Date: Fri, 2 Jan 2009 11:32:29 +0100 Subject: tevent: rename event_loop_* => tevent_loop_* metze --- lib/tevent/tevent.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'lib/tevent/tevent.c') diff --git a/lib/tevent/tevent.c b/lib/tevent/tevent.c index 94d71d490d..563a6522a5 100644 --- a/lib/tevent/tevent.c +++ b/lib/tevent/tevent.c @@ -47,8 +47,8 @@ After that you can add/remove events that you are interested in using event_add_*() and talloc_free() - Finally, you call event_loop_wait_once() to block waiting for one of the - events to occor or event_loop_wait() which will loop + Finally, you call tevent_loop_wait_once() to block waiting for one of the + events to occor or tevent_loop_wait() which will loop forever. */ @@ -279,7 +279,7 @@ struct signal_event *event_add_signal(struct tevent_context *ev, TALLOC_CTX *mem /* do a single event loop using the events defined in ev */ -int event_loop_once(struct tevent_context *ev) +int tevent_loop_once(struct tevent_context *ev) { return ev->ops->loop_once(ev); } @@ -287,7 +287,7 @@ int event_loop_once(struct tevent_context *ev) /* return on failure or (with 0) if all fd events are removed */ -int event_loop_wait(struct tevent_context *ev) +int tevent_loop_wait(struct tevent_context *ev) { return ev->ops->loop_wait(ev); } -- cgit From 7db63990698563fd5d32698cb7988358cf5ab247 Mon Sep 17 00:00:00 2001 From: Stefan Metzmacher Date: Fri, 2 Jan 2009 11:36:52 +0100 Subject: tevent: rename event_[s|g]et_fd_flags => tevent_fd_[s|g]et_flags metze --- lib/tevent/tevent.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'lib/tevent/tevent.c') diff --git a/lib/tevent/tevent.c b/lib/tevent/tevent.c index 563a6522a5..4c87ef5f73 100644 --- a/lib/tevent/tevent.c +++ b/lib/tevent/tevent.c @@ -233,7 +233,7 @@ struct aio_event *event_add_aio(struct tevent_context *ev, /* return the fd event flags */ -uint16_t event_get_fd_flags(struct tevent_fd *fde) +uint16_t tevent_fd_get_flags(struct tevent_fd *fde) { if (!fde) return 0; return fde->event_ctx->ops->get_fd_flags(fde); @@ -242,7 +242,7 @@ uint16_t event_get_fd_flags(struct tevent_fd *fde) /* set the fd event flags */ -void event_set_fd_flags(struct tevent_fd *fde, uint16_t flags) +void tevent_fd_set_flags(struct tevent_fd *fde, uint16_t flags) { if (!fde) return; fde->event_ctx->ops->set_fd_flags(fde, flags); -- cgit From 0a73e8b334d2b9f5e8032c685d78b6425a9fa5e7 Mon Sep 17 00:00:00 2001 From: Stefan Metzmacher Date: Fri, 2 Jan 2009 11:30:00 +0100 Subject: tevent: rename event_context_init* => tevent_context_init*() metze --- lib/tevent/tevent.c | 51 ++++++++++++++++++++++++++------------------------- 1 file changed, 26 insertions(+), 25 deletions(-) (limited to 'lib/tevent/tevent.c') diff --git a/lib/tevent/tevent.c b/lib/tevent/tevent.c index 4c87ef5f73..0b4a3cd5b7 100644 --- a/lib/tevent/tevent.c +++ b/lib/tevent/tevent.c @@ -41,7 +41,7 @@ handler to get another event. To setup a set of events you first need to create a event_context - structure using the function event_context_init(); This returns a + structure using the function tevent_context_init(); This returns a 'struct tevent_context' that you use in all subsequent calls. After that you can add/remove events that you are interested in @@ -57,36 +57,36 @@ #include "tevent_internal.h" #include "tevent_util.h" -struct event_ops_list { - struct event_ops_list *next, *prev; +struct tevent_ops_list { + struct tevent_ops_list *next, *prev; const char *name; - const struct event_ops *ops; + const struct tevent_ops *ops; }; /* list of registered event backends */ -static struct event_ops_list *event_backends = NULL; +static struct tevent_ops_list *tevent_backends = NULL; static char *tevent_default_backend = NULL; /* register an events backend */ -bool event_register_backend(const char *name, const struct event_ops *ops) +bool event_register_backend(const char *name, const struct tevent_ops *ops) { - struct event_ops_list *e; + struct tevent_ops_list *e; - for (e = event_backends; e != NULL; e = e->next) { + for (e = tevent_backends; e != NULL; e = e->next) { if (0 == strcmp(e->name, name)) { /* already registered, skip it */ return true; } } - e = talloc(talloc_autofree_context(), struct event_ops_list); + e = talloc(talloc_autofree_context(), struct tevent_ops_list); if (e == NULL) return false; e->name = name; e->ops = ops; - DLIST_ADD(event_backends, e); + DLIST_ADD(tevent_backends, e); return true; } @@ -104,7 +104,7 @@ void tevent_set_default_backend(const char *backend) /* initialise backends if not already done */ -static void event_backend_init(void) +static void tevent_backend_init(void) { events_select_init(); events_standard_init(); @@ -119,14 +119,14 @@ static void event_backend_init(void) /* list available backends */ -const char **event_backend_list(TALLOC_CTX *mem_ctx) +const char **tevent_backend_list(TALLOC_CTX *mem_ctx) { const char **list = NULL; - struct event_ops_list *e; + struct tevent_ops_list *e; - event_backend_init(); + tevent_backend_init(); - for (e=event_backends;e;e=e->next) { + for (e=tevent_backends;e;e=e->next) { list = ev_str_list_add(list, e->name); } @@ -144,10 +144,10 @@ const char **event_backend_list(TALLOC_CTX *mem_ctx) This function is for allowing third-party-applications to hook in gluecode to their own event loop code, so that they can make async usage of our client libs - NOTE: use event_context_init() inside of samba! + NOTE: use tevent_context_init() inside of samba! */ -static struct tevent_context *event_context_init_ops(TALLOC_CTX *mem_ctx, - const struct event_ops *ops) +static struct tevent_context *tevent_context_init_ops(TALLOC_CTX *mem_ctx, + const struct tevent_ops *ops) { struct tevent_context *ev; int ret; @@ -171,11 +171,12 @@ static struct tevent_context *event_context_init_ops(TALLOC_CTX *mem_ctx, call, and all subsequent calls pass this event_context as the first element. Event handlers also receive this as their first argument. */ -struct tevent_context *event_context_init_byname(TALLOC_CTX *mem_ctx, const char *name) +struct tevent_context *tevent_context_init_byname(TALLOC_CTX *mem_ctx, + const char *name) { - struct event_ops_list *e; + struct tevent_ops_list *e; - event_backend_init(); + tevent_backend_init(); if (name == NULL) { name = tevent_default_backend; @@ -184,9 +185,9 @@ struct tevent_context *event_context_init_byname(TALLOC_CTX *mem_ctx, const char name = "standard"; } - for (e=event_backends;e;e=e->next) { + for (e=tevent_backends;e;e=e->next) { if (strcmp(name, e->name) == 0) { - return event_context_init_ops(mem_ctx, e->ops); + return tevent_context_init_ops(mem_ctx, e->ops); } } return NULL; @@ -198,9 +199,9 @@ struct tevent_context *event_context_init_byname(TALLOC_CTX *mem_ctx, const char call, and all subsequent calls pass this event_context as the first element. Event handlers also receive this as their first argument. */ -struct tevent_context *event_context_init(TALLOC_CTX *mem_ctx) +struct tevent_context *tevent_context_init(TALLOC_CTX *mem_ctx) { - return event_context_init_byname(mem_ctx, NULL); + return tevent_context_init_byname(mem_ctx, NULL); } /* -- cgit From d9529a331afaf1c82b24becc1d0d245e19d518aa Mon Sep 17 00:00:00 2001 From: Stefan Metzmacher Date: Fri, 2 Jan 2009 13:35:32 +0100 Subject: tevent: rename event_register_backend() => tevent_register_backend() And fix the callers and there init functions. metze --- lib/tevent/tevent.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'lib/tevent/tevent.c') diff --git a/lib/tevent/tevent.c b/lib/tevent/tevent.c index 0b4a3cd5b7..676a3dc398 100644 --- a/lib/tevent/tevent.c +++ b/lib/tevent/tevent.c @@ -70,7 +70,7 @@ static char *tevent_default_backend = NULL; /* register an events backend */ -bool event_register_backend(const char *name, const struct tevent_ops *ops) +bool tevent_register_backend(const char *name, const struct tevent_ops *ops) { struct tevent_ops_list *e; @@ -106,13 +106,13 @@ void tevent_set_default_backend(const char *backend) */ static void tevent_backend_init(void) { - events_select_init(); - events_standard_init(); + tevent_select_init(); + tevent_standard_init(); #if HAVE_EVENTS_EPOLL - events_epoll_init(); + tevent_epoll_init(); #endif #if HAVE_LINUX_AIO - events_aio_init(); + tevent_aio_init(); #endif } -- cgit From b12e78e64517d423aefecc84f23499b13aedd734 Mon Sep 17 00:00:00 2001 From: Stefan Metzmacher Date: Fri, 2 Jan 2009 13:39:26 +0100 Subject: tevent: use HAVE_EPOLL instead of HAVE_EVENTS_EPOLL metze --- lib/tevent/tevent.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'lib/tevent/tevent.c') diff --git a/lib/tevent/tevent.c b/lib/tevent/tevent.c index 676a3dc398..f79e4cefb5 100644 --- a/lib/tevent/tevent.c +++ b/lib/tevent/tevent.c @@ -108,10 +108,10 @@ static void tevent_backend_init(void) { tevent_select_init(); tevent_standard_init(); -#if HAVE_EVENTS_EPOLL +#ifdef HAVE_EPOLL tevent_epoll_init(); #endif -#if HAVE_LINUX_AIO +#ifdef HAVE_LINUX_AIO tevent_aio_init(); #endif } -- cgit From 49acf9799aab288b4e585295eb7c44a719973945 Mon Sep 17 00:00:00 2001 From: Stefan Metzmacher Date: Fri, 2 Jan 2009 11:44:17 +0100 Subject: tevent: make tevent_add_*() macros arround _tevent_add_*() This passes some additional debug information into the events system to make it easier to find bugs. metze --- lib/tevent/tevent.c | 53 +++++++++++++++++++++++++++++++++-------------------- 1 file changed, 33 insertions(+), 20 deletions(-) (limited to 'lib/tevent/tevent.c') diff --git a/lib/tevent/tevent.c b/lib/tevent/tevent.c index f79e4cefb5..fd44838a98 100644 --- a/lib/tevent/tevent.c +++ b/lib/tevent/tevent.c @@ -45,7 +45,7 @@ 'struct tevent_context' that you use in all subsequent calls. After that you can add/remove events that you are interested in - using event_add_*() and talloc_free() + using tevent_add_*() and talloc_free() Finally, you call tevent_loop_wait_once() to block waiting for one of the events to occor or tevent_loop_wait() which will loop @@ -208,12 +208,17 @@ struct tevent_context *tevent_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 + if flags contains TEVENT_FD_AUTOCLOSE then the fd will be closed when the returned fd_event context is freed */ -struct tevent_fd *event_add_fd(struct tevent_context *ev, TALLOC_CTX *mem_ctx, - int fd, uint16_t flags, event_fd_handler_t handler, - void *private_data) +struct tevent_fd *_tevent_add_fd(struct tevent_context *ev, + TALLOC_CTX *mem_ctx, + int fd, + uint16_t flags, + tevent_fd_handler_t handler, + void *private_data, + const char *handler_name, + const char *location) { return ev->ops->add_fd(ev, mem_ctx, fd, flags, handler, private_data); } @@ -221,11 +226,13 @@ struct tevent_fd *event_add_fd(struct tevent_context *ev, TALLOC_CTX *mem_ctx, /* add a disk aio event */ -struct aio_event *event_add_aio(struct tevent_context *ev, - TALLOC_CTX *mem_ctx, - struct iocb *iocb, - event_aio_handler_t handler, - void *private_data) +struct tevent_aio *_tevent_add_aio(struct tevent_context *ev, + TALLOC_CTX *mem_ctx, + struct iocb *iocb, + tevent_aio_handler_t handler, + void *private_data, + const char *handler_name, + const char *location) { if (ev->ops->add_aio == NULL) return NULL; return ev->ops->add_aio(ev, mem_ctx, iocb, handler, private_data); @@ -250,13 +257,16 @@ void tevent_fd_set_flags(struct tevent_fd *fde, uint16_t flags) } /* - add a timed event + add a timer event return NULL on failure */ -struct tevent_timer *event_add_timed(struct tevent_context *ev, TALLOC_CTX *mem_ctx, - struct timeval next_event, - event_timed_handler_t handler, - void *private_data) +struct tevent_timer *_tevent_add_timer(struct tevent_context *ev, + TALLOC_CTX *mem_ctx, + struct timeval next_event, + tevent_timer_handler_t handler, + void *private_data, + const char *handler_name, + const char *location) { return ev->ops->add_timer(ev, mem_ctx, next_event, handler, private_data); } @@ -268,11 +278,14 @@ struct tevent_timer *event_add_timed(struct tevent_context *ev, TALLOC_CTX *mem_ return NULL on failure */ -struct signal_event *event_add_signal(struct tevent_context *ev, TALLOC_CTX *mem_ctx, - int signum, - int sa_flags, - event_signal_handler_t handler, - void *private_data) +struct tevent_signal *_tevent_add_signal(struct tevent_context *ev, + TALLOC_CTX *mem_ctx, + int signum, + int sa_flags, + tevent_signal_handler_t handler, + void *private_data, + const char *handler_name, + const char *location) { return ev->ops->add_signal(ev, mem_ctx, signum, sa_flags, handler, private_data); } -- cgit From 227f799dee4e59479612bcb3dc96231589515051 Mon Sep 17 00:00:00 2001 From: Stefan Metzmacher Date: Fri, 2 Jan 2009 13:26:32 +0100 Subject: tevent: pass down handler_name and location to the backend layer metze --- lib/tevent/tevent.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) (limited to 'lib/tevent/tevent.c') diff --git a/lib/tevent/tevent.c b/lib/tevent/tevent.c index fd44838a98..9319177646 100644 --- a/lib/tevent/tevent.c +++ b/lib/tevent/tevent.c @@ -220,7 +220,8 @@ struct tevent_fd *_tevent_add_fd(struct tevent_context *ev, const char *handler_name, const char *location) { - return ev->ops->add_fd(ev, mem_ctx, fd, flags, handler, private_data); + return ev->ops->add_fd(ev, mem_ctx, fd, flags, handler, private_data, + handler_name, location); } /* @@ -235,7 +236,8 @@ struct tevent_aio *_tevent_add_aio(struct tevent_context *ev, const char *location) { if (ev->ops->add_aio == NULL) return NULL; - return ev->ops->add_aio(ev, mem_ctx, iocb, handler, private_data); + return ev->ops->add_aio(ev, mem_ctx, iocb, handler, private_data, + handler_name, location); } /* @@ -268,7 +270,8 @@ struct tevent_timer *_tevent_add_timer(struct tevent_context *ev, const char *handler_name, const char *location) { - return ev->ops->add_timer(ev, mem_ctx, next_event, handler, private_data); + return ev->ops->add_timer(ev, mem_ctx, next_event, handler, private_data, + handler_name, location); } /* @@ -287,7 +290,8 @@ struct tevent_signal *_tevent_add_signal(struct tevent_context *ev, const char *handler_name, const char *location) { - return ev->ops->add_signal(ev, mem_ctx, signum, sa_flags, handler, private_data); + return ev->ops->add_signal(ev, mem_ctx, signum, sa_flags, handler, private_data, + handler_name, location); } /* -- cgit From e45ed828d042acca09cb1ed5b6dd7a24eb5e7ffd Mon Sep 17 00:00:00 2001 From: Stefan Metzmacher Date: Sat, 3 Jan 2009 11:27:00 +0100 Subject: tevent: add tevent_fd_set_close_fn() Let callers specify a close function as an alternative to TEVENT_FD_AUTOCLOSE. metze --- lib/tevent/tevent.c | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'lib/tevent/tevent.c') diff --git a/lib/tevent/tevent.c b/lib/tevent/tevent.c index 9319177646..93918cc14d 100644 --- a/lib/tevent/tevent.c +++ b/lib/tevent/tevent.c @@ -240,6 +240,16 @@ struct tevent_aio *_tevent_add_aio(struct tevent_context *ev, handler_name, location); } +/* + set a close function on the fd event +*/ +void tevent_fd_set_close_fn(struct tevent_fd *fde, + tevent_fd_close_fn_t close_fn) +{ + if (!fde) return; + fde->event_ctx->ops->set_fd_close_fn(fde, close_fn); +} + /* return the fd event flags */ -- cgit From 193eba85a9a6eff7c314f6afaaeff6bf3cff1399 Mon Sep 17 00:00:00 2001 From: Stefan Metzmacher Date: Sat, 3 Jan 2009 12:39:11 +0100 Subject: tevent: add tevent_fd_set_auto_close() tevent_fd_set_auto_close() is a simple wrapper arround tevent_fd_set_close_fn() with a callback that uses plain close(2). metze --- lib/tevent/tevent.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'lib/tevent/tevent.c') diff --git a/lib/tevent/tevent.c b/lib/tevent/tevent.c index 93918cc14d..5582b583e7 100644 --- a/lib/tevent/tevent.c +++ b/lib/tevent/tevent.c @@ -53,6 +53,7 @@ */ #include "replace.h" +#include "system/filesys.h" #include "tevent.h" #include "tevent_internal.h" #include "tevent_util.h" @@ -250,6 +251,19 @@ void tevent_fd_set_close_fn(struct tevent_fd *fde, fde->event_ctx->ops->set_fd_close_fn(fde, close_fn); } +static void tevent_fd_auto_close_fn(struct tevent_context *ev, + struct tevent_fd *fde, + int fd, + void *private_data) +{ + close(fd); +} + +void tevent_fd_set_auto_close(struct tevent_fd *fde) +{ + tevent_fd_set_close_fn(fde, tevent_fd_auto_close_fn); +} + /* return the fd event flags */ -- cgit