>From 7adc135ec72e189a89f5bbf69066088374ced87d Mon Sep 17 00:00:00 2001 From: Stefan Metzmacher Date: Sat, 17 Sep 2011 19:53:55 +0200 Subject: [PATCH 01/14] tevent: cancel the timeout timer when the request is finished As we might defer the callback with tevent_req_defer_callback() when calling tevent_req_done(), we should cancel the timeout directly. Signed-off-by: Stefan Metzmacher --- lib/tevent/tevent_req.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/lib/tevent/tevent_req.c b/lib/tevent/tevent_req.c index 556d984..4a3b8b1 100644 --- a/lib/tevent/tevent_req.c +++ b/lib/tevent/tevent_req.c @@ -109,6 +109,12 @@ static void tevent_req_finish(struct tevent_req *req, enum tevent_req_state state, const char *location) { + /* + * make sure we do not timeout after + * the request was already finished + */ + TALLOC_FREE(req->internal.timer); + req->internal.state = state; _tevent_req_notify_callback(req, location); } -- 1.7.9.5 >From 9ec120a1a40a29cb75162a8d10b6b6d2fb6468b0 Mon Sep 17 00:00:00 2001 From: Stefan Metzmacher Date: Fri, 27 Sep 2013 02:59:22 +0200 Subject: [PATCH 02/14] tevent: let tevent_req_received() clear the private_cancel function This makes sure it's not called when the private state is already gone. Signed-off-by: Stefan Metzmacher --- lib/tevent/tevent_req.c | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/tevent/tevent_req.c b/lib/tevent/tevent_req.c index 4a3b8b1..a324418 100644 --- a/lib/tevent/tevent_req.c +++ b/lib/tevent/tevent_req.c @@ -203,6 +203,7 @@ void tevent_req_received(struct tevent_req *req) { TALLOC_FREE(req->data); req->private_print = NULL; + req->private_cancel = NULL; TALLOC_FREE(req->internal.trigger); TALLOC_FREE(req->internal.timer); -- 1.7.9.5 >From 3e65c3dc505f7039a40583a55c5d4689ecb14c56 Mon Sep 17 00:00:00 2001 From: Stefan Metzmacher Date: Fri, 27 Sep 2013 03:02:24 +0200 Subject: [PATCH 03/14] tevent: tevent_req_create() already uses ZERO_STRUCT(req) There's no need to zero individual members. Signed-off-by: Stefan Metzmacher --- lib/tevent/tevent_req.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/lib/tevent/tevent_req.c b/lib/tevent/tevent_req.c index a324418..581b818 100644 --- a/lib/tevent/tevent_req.c +++ b/lib/tevent/tevent_req.c @@ -70,14 +70,12 @@ struct tevent_req *_tevent_req_create(TALLOC_CTX *mem_ctx, ZERO_STRUCTP(req); req->internal.private_type = type; req->internal.create_location = location; - req->internal.finish_location = NULL; req->internal.state = TEVENT_REQ_IN_PROGRESS; req->internal.trigger = tevent_create_immediate(req); if (!req->internal.trigger) { talloc_free(req); return NULL; } - req->internal.defer_callback_ev = NULL; data = talloc_zero_size(req, data_size); if (data == NULL) { -- 1.7.9.5 >From 0a2bce1393e4c8e65b8f69c051c9a236319584b0 Mon Sep 17 00:00:00 2001 From: Stefan Metzmacher Date: Fri, 27 Sep 2013 03:41:29 +0200 Subject: [PATCH 04/14] tevent: add/use tevent_req_destructor This makes sure we call tevent_req_received(req) on talloc_free() and cleanup things in a defined order. Signed-off-by: Stefan Metzmacher --- lib/tevent/tevent_req.c | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/lib/tevent/tevent_req.c b/lib/tevent/tevent_req.c index 581b818..b3db1e7 100644 --- a/lib/tevent/tevent_req.c +++ b/lib/tevent/tevent_req.c @@ -51,6 +51,8 @@ char *tevent_req_print(TALLOC_CTX *mem_ctx, struct tevent_req *req) return req->private_print(req, mem_ctx); } +static int tevent_req_destructor(struct tevent_req *req); + struct tevent_req *_tevent_req_create(TALLOC_CTX *mem_ctx, void *pdata, size_t data_size, @@ -86,10 +88,18 @@ struct tevent_req *_tevent_req_create(TALLOC_CTX *mem_ctx, req->data = data; + talloc_set_destructor(req, tevent_req_destructor); + *ppdata = data; return req; } +static int tevent_req_destructor(struct tevent_req *req) +{ + tevent_req_received(req); + return 0; +} + void _tevent_req_notify_callback(struct tevent_req *req, const char *location) { req->internal.finish_location = location; @@ -199,7 +209,8 @@ bool tevent_req_is_in_progress(struct tevent_req *req) void tevent_req_received(struct tevent_req *req) { - TALLOC_FREE(req->data); + talloc_set_destructor(req, NULL); + req->private_print = NULL; req->private_cancel = NULL; @@ -207,6 +218,8 @@ void tevent_req_received(struct tevent_req *req) TALLOC_FREE(req->internal.timer); req->internal.state = TEVENT_REQ_RECEIVED; + + TALLOC_FREE(req->data); } bool tevent_req_poll(struct tevent_req *req, -- 1.7.9.5 >From 61746ded2897411596f84bc3a75f36b6679a2661 Mon Sep 17 00:00:00 2001 From: Gregor Beck Date: Thu, 19 Sep 2013 15:14:25 +0200 Subject: [PATCH 05/14] tevent: add tevent_queue_wait_send/recv() Pair-Programmed-With: Stefan Metzmacher Signed-off-by: Gregor Beck Signed-off-by: Stefan Metzmacher Reviewed-by: Stefan Metzmacher --- lib/tevent/tevent.h | 33 ++++++++++++++++++++++++++++ lib/tevent/tevent_queue.c | 52 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 85 insertions(+) diff --git a/lib/tevent/tevent.h b/lib/tevent/tevent.h index 2bc4e2d..0705ff3 100644 --- a/lib/tevent/tevent.h +++ b/lib/tevent/tevent.h @@ -1592,6 +1592,39 @@ size_t tevent_queue_length(struct tevent_queue *queue); */ bool tevent_queue_running(struct tevent_queue *queue); +/** + * @brief Create a tevent subrequest that waits in a tevent_queue + * + * The idea is that always the same syntax for tevent requests. + * + * @param[in] mem_ctx The talloc memory context to use. + * + * @param[in] ev The event handle to setup the request. + * + * @param[in] queue The queue to wait in. + * + * @return The new subrequest, NULL on error. + * + * @see tevent_queue_wait_recv() + */ +struct tevent_req *tevent_queue_wait_send(TALLOC_CTX *mem_ctx, + struct tevent_context *ev, + struct tevent_queue *queue); + +/** + * @brief Check if we no longer need to wait in the queue. + * + * This function needs to be called in the callback function set after calling + * tevent_queue_wait_send(). + * + * @param[in] req The tevent request to check. + * + * @return True on success, false otherwise. + * + * @see tevent_queue_wait_send() + */ +bool tevent_queue_wait_recv(struct tevent_req *req); + typedef int (*tevent_nesting_hook)(struct tevent_context *ev, void *private_data, uint32_t level, diff --git a/lib/tevent/tevent_queue.c b/lib/tevent/tevent_queue.c index 4750675..361fc7b 100644 --- a/lib/tevent/tevent_queue.c +++ b/lib/tevent/tevent_queue.c @@ -298,3 +298,55 @@ bool tevent_queue_running(struct tevent_queue *queue) { return queue->running; } + +struct tevent_queue_wait_state { + uint8_t dummy; +}; + +static void tevent_queue_wait_trigger(struct tevent_req *req, + void *private_data); + +struct tevent_req *tevent_queue_wait_send(TALLOC_CTX *mem_ctx, + struct tevent_context *ev, + struct tevent_queue *queue) +{ + struct tevent_req *req; + struct tevent_queue_wait_state *state; + bool ok; + + req = tevent_req_create(mem_ctx, &state, + struct tevent_queue_wait_state); + if (req == NULL) { + return NULL; + } + + ok = tevent_queue_add(queue, ev, req, + tevent_queue_wait_trigger, + NULL); + if (!ok) { + tevent_req_nomem(NULL, req); + return tevent_req_post(req, ev); + } + + return req; +} + +static void tevent_queue_wait_trigger(struct tevent_req *req, + void *private_data) +{ + tevent_req_done(req); +} + +bool tevent_queue_wait_recv(struct tevent_req *req) +{ + enum tevent_req_state state; + uint64_t err; + + if (tevent_req_is_error(req, &state, &err)) { + tevent_req_received(req); + return false; + } + + tevent_req_received(req); + return true; +} -- 1.7.9.5 >From 1c0ac60ba9a372fb77123d4682e0782d1f83ce24 Mon Sep 17 00:00:00 2001 From: Stefan Metzmacher Date: Thu, 5 Dec 2013 08:46:47 +0100 Subject: [PATCH 06/14] tevent: use talloc_get_type_abort() in the documentation examples Signed-off-by: Stefan Metzmacher --- lib/tevent/doc/tevent_events.dox | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/tevent/doc/tevent_events.dox b/lib/tevent/doc/tevent_events.dox index 8e350d2..d56af25 100644 --- a/lib/tevent/doc/tevent_events.dox +++ b/lib/tevent/doc/tevent_events.dox @@ -45,7 +45,7 @@ struct state { static void callback(struct tevent_context *ev, struct tevent_timer *tim, struct timeval current_time, void *private_data) { - struct state *data = talloc_get_type(private_data, struct state); + struct state *data = talloc_get_type_abort(private_data, struct state); struct tevent_timer *time_event; struct timeval schedule; @@ -153,7 +153,7 @@ struct info_struct { static void foo(struct tevent_context *ev, struct tevent_immediate *im, void *private_data) { - struct info_struct *data = talloc_get_type(private_data, struct info_struct); + struct info_struct *data = talloc_get_type_abort(private_data, struct info_struct); printf("Data value: %d\n", data->counter); } -- 1.7.9.5 >From fa5a9325fe4308e68c16eeb10b44e9ba802cfd5e Mon Sep 17 00:00:00 2001 From: Stefan Metzmacher Date: Thu, 5 Dec 2013 08:47:27 +0100 Subject: [PATCH 07/14] tevent: make use of talloc_get_type_abort() in tevent_queue.c Signed-off-by: Stefan Metzmacher --- lib/tevent/tevent_queue.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/lib/tevent/tevent_queue.c b/lib/tevent/tevent_queue.c index 361fc7b..0c5fe4e 100644 --- a/lib/tevent/tevent_queue.c +++ b/lib/tevent/tevent_queue.c @@ -133,8 +133,9 @@ static void tevent_queue_immediate_trigger(struct tevent_context *ev, struct tevent_immediate *im, void *private_data) { - struct tevent_queue *q = talloc_get_type(private_data, - struct tevent_queue); + struct tevent_queue *q = + talloc_get_type_abort(private_data, + struct tevent_queue); if (!q->running) { return; -- 1.7.9.5 >From ebd059f352f8dd1154d392efc24446059224c24b Mon Sep 17 00:00:00 2001 From: Stefan Metzmacher Date: Thu, 5 Dec 2013 08:47:27 +0100 Subject: [PATCH 08/14] tevent: make use of talloc_get_type_abort() in tevent_req.c Signed-off-by: Stefan Metzmacher --- lib/tevent/tevent_req.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/lib/tevent/tevent_req.c b/lib/tevent/tevent_req.c index b3db1e7..30e91e2 100644 --- a/lib/tevent/tevent_req.c +++ b/lib/tevent/tevent_req.c @@ -177,8 +177,9 @@ static void tevent_req_trigger(struct tevent_context *ev, struct tevent_immediate *im, void *private_data) { - struct tevent_req *req = talloc_get_type(private_data, - struct tevent_req); + struct tevent_req *req = + talloc_get_type_abort(private_data, + struct tevent_req); tevent_req_finish(req, req->internal.state, req->internal.finish_location); @@ -255,8 +256,9 @@ static void tevent_req_timedout(struct tevent_context *ev, struct timeval now, void *private_data) { - struct tevent_req *req = talloc_get_type(private_data, - struct tevent_req); + struct tevent_req *req = + talloc_get_type_abort(private_data, + struct tevent_req); TALLOC_FREE(req->internal.timer); -- 1.7.9.5 >From a9e4dbe667c31224ac47f391fe463d40d5aa6a68 Mon Sep 17 00:00:00 2001 From: Stefan Metzmacher Date: Thu, 5 Dec 2013 08:47:27 +0100 Subject: [PATCH 09/14] tevent: make use of talloc_get_type_abort() in tevent_select.c Signed-off-by: Stefan Metzmacher --- lib/tevent/tevent_select.c | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/lib/tevent/tevent_select.c b/lib/tevent/tevent_select.c index bfce246..73f27b7 100644 --- a/lib/tevent/tevent_select.c +++ b/lib/tevent/tevent_select.c @@ -91,8 +91,8 @@ static int select_event_fd_destructor(struct tevent_fd *fde) struct select_event_context *select_ev = NULL; if (ev) { - select_ev = talloc_get_type(ev->additional_data, - struct select_event_context); + select_ev = talloc_get_type_abort(ev->additional_data, + struct select_event_context); if (select_ev->maxfd == fde->fd) { select_ev->maxfd = EVENT_INVALID_MAXFD; @@ -113,8 +113,9 @@ static struct tevent_fd *select_event_add_fd(struct tevent_context *ev, TALLOC_C const char *handler_name, const char *location) { - struct select_event_context *select_ev = talloc_get_type(ev->additional_data, - struct select_event_context); + struct select_event_context *select_ev = + talloc_get_type_abort(ev->additional_data, + struct select_event_context); struct tevent_fd *fde; if (fd < 0 || fd >= FD_SETSIZE) { @@ -236,8 +237,9 @@ static int select_event_loop_select(struct select_event_context *select_ev, stru */ static int select_event_loop_once(struct tevent_context *ev, const char *location) { - struct select_event_context *select_ev = talloc_get_type(ev->additional_data, - struct select_event_context); + struct select_event_context *select_ev = + talloc_get_type_abort(ev->additional_data, + struct select_event_context); struct timeval tval; if (ev->signal_events && -- 1.7.9.5 >From 5494d286f977b997db98042004665e50b2d1392f Mon Sep 17 00:00:00 2001 From: Stefan Metzmacher Date: Thu, 5 Dec 2013 08:47:27 +0100 Subject: [PATCH 10/14] tevent: make use of talloc_get_type_abort() in tevent_signal.c Signed-off-by: Stefan Metzmacher --- lib/tevent/tevent_signal.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/lib/tevent/tevent_signal.c b/lib/tevent/tevent_signal.c index 8e13d73..cf5464f 100644 --- a/lib/tevent/tevent_signal.c +++ b/lib/tevent/tevent_signal.c @@ -170,9 +170,9 @@ static int tevent_common_signal_list_destructor(struct tevent_common_signal_list */ static int tevent_signal_destructor(struct tevent_signal *se) { - struct tevent_common_signal_list *sl; - sl = talloc_get_type(se->additional_data, - struct tevent_common_signal_list); + struct tevent_common_signal_list *sl = + talloc_get_type_abort(se->additional_data, + struct tevent_common_signal_list); if (se->event_ctx) { struct tevent_context *ev = se->event_ctx; @@ -480,9 +480,9 @@ int tevent_common_check_signal(struct tevent_context *ev) void tevent_cleanup_pending_signal_handlers(struct tevent_signal *se) { - struct tevent_common_signal_list *sl; - sl = talloc_get_type(se->additional_data, - struct tevent_common_signal_list); + struct tevent_common_signal_list *sl = + talloc_get_type_abort(se->additional_data, + struct tevent_common_signal_list); tevent_common_signal_list_destructor(sl); -- 1.7.9.5 >From 7c41b464bf70bb6f30e2f78a1587c1e6ef28ca52 Mon Sep 17 00:00:00 2001 From: Stefan Metzmacher Date: Thu, 5 Dec 2013 08:47:27 +0100 Subject: [PATCH 11/14] tevent: make use of talloc_get_type_abort() in tevent_epoll.c Signed-off-by: Stefan Metzmacher --- lib/tevent/tevent_epoll.c | 26 +++++++++++--------------- 1 file changed, 11 insertions(+), 15 deletions(-) diff --git a/lib/tevent/tevent_epoll.c b/lib/tevent/tevent_epoll.c index 599c190..951fa42 100644 --- a/lib/tevent/tevent_epoll.c +++ b/lib/tevent/tevent_epoll.c @@ -120,17 +120,10 @@ _PRIVATE_ bool tevent_epoll_set_panic_fallback(struct tevent_context *ev, bool (*panic_fallback)(struct tevent_context *ev, bool replay)) { - struct epoll_event_context *epoll_ev; - - if (ev->additional_data == NULL) { - return false; - } + struct epoll_event_context *epoll_ev = + talloc_get_type_abort(ev->additional_data, + struct epoll_event_context); - epoll_ev = talloc_get_type(ev->additional_data, - struct epoll_event_context); - if (epoll_ev == NULL) { - return false; - } epoll_ev->panic_fallback = panic_fallback; return true; } @@ -843,8 +836,9 @@ static struct tevent_fd *epoll_event_add_fd(struct tevent_context *ev, TALLOC_CT const char *handler_name, const char *location) { - struct epoll_event_context *epoll_ev = talloc_get_type(ev->additional_data, - struct epoll_event_context); + struct epoll_event_context *epoll_ev = + talloc_get_type_abort(ev->additional_data, + struct epoll_event_context); struct tevent_fd *fde; bool panic_triggered = false; @@ -879,7 +873,8 @@ static void epoll_event_set_fd_flags(struct tevent_fd *fde, uint16_t flags) if (fde->flags == flags) return; ev = fde->event_ctx; - epoll_ev = talloc_get_type(ev->additional_data, struct epoll_event_context); + epoll_ev = talloc_get_type_abort(ev->additional_data, + struct epoll_event_context); fde->flags = flags; @@ -898,8 +893,9 @@ static void epoll_event_set_fd_flags(struct tevent_fd *fde, uint16_t flags) */ static int epoll_event_loop_once(struct tevent_context *ev, const char *location) { - struct epoll_event_context *epoll_ev = talloc_get_type(ev->additional_data, - struct epoll_event_context); + struct epoll_event_context *epoll_ev = + talloc_get_type_abort(ev->additional_data, + struct epoll_event_context); struct timeval tval; bool panic_triggered = false; -- 1.7.9.5 >From 056afbe2ebb340f7db18b3e553fba841ce94cd81 Mon Sep 17 00:00:00 2001 From: Stefan Metzmacher Date: Mon, 9 Dec 2013 10:29:45 +0100 Subject: [PATCH 12/14] tevent: change TEVENT_SA_INFO_QUEUE_COUNT from 64 to 256 There are some existing callers which assume the old SA_INFO_QUEUE_COUNT 100 value. 256 should give room for the future. Bug: https://bugzilla.samba.org/show_bug.cgi?id=10214 Signed-off-by: Stefan Metzmacher --- lib/tevent/tevent_signal.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/tevent/tevent_signal.c b/lib/tevent/tevent_signal.c index cf5464f..3d23622 100644 --- a/lib/tevent/tevent_signal.c +++ b/lib/tevent/tevent_signal.c @@ -35,7 +35,7 @@ wrap to work correctly. Thanks to Petr Vandrovec for this. */ -#define TEVENT_SA_INFO_QUEUE_COUNT 64 +#define TEVENT_SA_INFO_QUEUE_COUNT 256 struct tevent_sigcounter { uint32_t count; -- 1.7.9.5 >From df06906c1e84794a548f7275b0a36979149c074b Mon Sep 17 00:00:00 2001 From: Stefan Metzmacher Date: Mon, 9 Dec 2013 10:32:00 +0100 Subject: [PATCH 13/14] tevent: give the user the chance to ask for TEVENT_NUM_SIGNALS and TEVENT_SA_INFO_QUEUE_COUNT This way the caller can change use the supported limits without using hardcoded values. Bug: https://bugzilla.samba.org/show_bug.cgi?id=10214 Signed-off-by: Stefan Metzmacher --- lib/tevent/tevent_signal.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/lib/tevent/tevent_signal.c b/lib/tevent/tevent_signal.c index 3d23622..1ff4872 100644 --- a/lib/tevent/tevent_signal.c +++ b/lib/tevent/tevent_signal.c @@ -37,6 +37,16 @@ #define TEVENT_SA_INFO_QUEUE_COUNT 256 +size_t tevent_num_signals(void) +{ + return TEVENT_NUM_SIGNALS; +} + +size_t tevent_sa_info_queue_count(void) +{ + return TEVENT_SA_INFO_QUEUE_COUNT; +} + struct tevent_sigcounter { uint32_t count; uint32_t seen; -- 1.7.9.5 >From 6895eadc94e2986c9ea23fa13da4a03e73755740 Mon Sep 17 00:00:00 2001 From: Stefan Metzmacher Date: Fri, 27 Sep 2013 04:06:00 +0200 Subject: [PATCH 14/14] tevent: version 0.9.20 This adds the following new features: - tevent_queue_wait_send/recv() - tevent_num_signals() - tevent_sa_info_queue_count() Signed-off-by: Stefan Metzmacher --- lib/tevent/ABI/tevent-0.9.20.sigs | 87 +++++++++++++++++++++++++++++++++++++ lib/tevent/wscript | 2 +- 2 files changed, 88 insertions(+), 1 deletion(-) create mode 100644 lib/tevent/ABI/tevent-0.9.20.sigs diff --git a/lib/tevent/ABI/tevent-0.9.20.sigs b/lib/tevent/ABI/tevent-0.9.20.sigs new file mode 100644 index 0000000..7b9c77d --- /dev/null +++ b/lib/tevent/ABI/tevent-0.9.20.sigs @@ -0,0 +1,87 @@ +_tevent_add_fd: struct tevent_fd *(struct tevent_context *, TALLOC_CTX *, int, uint16_t, tevent_fd_handler_t, void *, const char *, const char *) +_tevent_add_signal: struct tevent_signal *(struct tevent_context *, TALLOC_CTX *, int, int, tevent_signal_handler_t, void *, const char *, const char *) +_tevent_add_timer: struct tevent_timer *(struct tevent_context *, TALLOC_CTX *, struct timeval, tevent_timer_handler_t, void *, const char *, const char *) +_tevent_create_immediate: struct tevent_immediate *(TALLOC_CTX *, const char *) +_tevent_loop_once: int (struct tevent_context *, const char *) +_tevent_loop_until: int (struct tevent_context *, bool (*)(void *), void *, const char *) +_tevent_loop_wait: int (struct tevent_context *, const char *) +_tevent_queue_create: struct tevent_queue *(TALLOC_CTX *, const char *, const char *) +_tevent_req_callback_data: void *(struct tevent_req *) +_tevent_req_cancel: bool (struct tevent_req *, const char *) +_tevent_req_create: struct tevent_req *(TALLOC_CTX *, void *, size_t, const char *, const char *) +_tevent_req_data: void *(struct tevent_req *) +_tevent_req_done: void (struct tevent_req *, const char *) +_tevent_req_error: bool (struct tevent_req *, uint64_t, const char *) +_tevent_req_nomem: bool (const void *, struct tevent_req *, const char *) +_tevent_req_notify_callback: void (struct tevent_req *, const char *) +_tevent_req_oom: void (struct tevent_req *, const char *) +_tevent_schedule_immediate: void (struct tevent_immediate *, struct tevent_context *, tevent_immediate_handler_t, void *, const char *, const char *) +tevent_backend_list: const char **(TALLOC_CTX *) +tevent_cleanup_pending_signal_handlers: void (struct tevent_signal *) +tevent_common_add_fd: struct tevent_fd *(struct tevent_context *, TALLOC_CTX *, int, uint16_t, tevent_fd_handler_t, void *, const char *, const char *) +tevent_common_add_signal: struct tevent_signal *(struct tevent_context *, TALLOC_CTX *, int, int, tevent_signal_handler_t, void *, const char *, const char *) +tevent_common_add_timer: struct tevent_timer *(struct tevent_context *, TALLOC_CTX *, struct timeval, tevent_timer_handler_t, void *, const char *, const char *) +tevent_common_add_timer_v2: struct tevent_timer *(struct tevent_context *, TALLOC_CTX *, struct timeval, tevent_timer_handler_t, void *, const char *, const char *) +tevent_common_check_signal: int (struct tevent_context *) +tevent_common_context_destructor: int (struct tevent_context *) +tevent_common_fd_destructor: int (struct tevent_fd *) +tevent_common_fd_get_flags: uint16_t (struct tevent_fd *) +tevent_common_fd_set_close_fn: void (struct tevent_fd *, tevent_fd_close_fn_t) +tevent_common_fd_set_flags: void (struct tevent_fd *, uint16_t) +tevent_common_loop_immediate: bool (struct tevent_context *) +tevent_common_loop_timer_delay: struct timeval (struct tevent_context *) +tevent_common_loop_wait: int (struct tevent_context *, const char *) +tevent_common_schedule_immediate: void (struct tevent_immediate *, struct tevent_context *, tevent_immediate_handler_t, void *, const char *, const char *) +tevent_context_init: struct tevent_context *(TALLOC_CTX *) +tevent_context_init_byname: struct tevent_context *(TALLOC_CTX *, const char *) +tevent_context_init_ops: struct tevent_context *(TALLOC_CTX *, const struct tevent_ops *, void *) +tevent_debug: void (struct tevent_context *, enum tevent_debug_level, const char *, ...) +tevent_fd_get_flags: uint16_t (struct tevent_fd *) +tevent_fd_set_auto_close: void (struct tevent_fd *) +tevent_fd_set_close_fn: void (struct tevent_fd *, tevent_fd_close_fn_t) +tevent_fd_set_flags: void (struct tevent_fd *, uint16_t) +tevent_get_trace_callback: void (struct tevent_context *, tevent_trace_callback_t *, void *) +tevent_loop_allow_nesting: void (struct tevent_context *) +tevent_loop_set_nesting_hook: void (struct tevent_context *, tevent_nesting_hook, void *) +tevent_num_signals: size_t (void) +tevent_queue_add: bool (struct tevent_queue *, struct tevent_context *, struct tevent_req *, tevent_queue_trigger_fn_t, void *) +tevent_queue_add_entry: struct tevent_queue_entry *(struct tevent_queue *, struct tevent_context *, struct tevent_req *, tevent_queue_trigger_fn_t, void *) +tevent_queue_add_optimize_empty: struct tevent_queue_entry *(struct tevent_queue *, struct tevent_context *, struct tevent_req *, tevent_queue_trigger_fn_t, void *) +tevent_queue_length: size_t (struct tevent_queue *) +tevent_queue_running: bool (struct tevent_queue *) +tevent_queue_start: void (struct tevent_queue *) +tevent_queue_stop: void (struct tevent_queue *) +tevent_queue_wait_recv: bool (struct tevent_req *) +tevent_queue_wait_send: struct tevent_req *(TALLOC_CTX *, struct tevent_context *, struct tevent_queue *) +tevent_re_initialise: int (struct tevent_context *) +tevent_register_backend: bool (const char *, const struct tevent_ops *) +tevent_req_default_print: char *(struct tevent_req *, TALLOC_CTX *) +tevent_req_defer_callback: void (struct tevent_req *, struct tevent_context *) +tevent_req_is_error: bool (struct tevent_req *, enum tevent_req_state *, uint64_t *) +tevent_req_is_in_progress: bool (struct tevent_req *) +tevent_req_poll: bool (struct tevent_req *, struct tevent_context *) +tevent_req_post: struct tevent_req *(struct tevent_req *, struct tevent_context *) +tevent_req_print: char *(TALLOC_CTX *, struct tevent_req *) +tevent_req_received: void (struct tevent_req *) +tevent_req_set_callback: void (struct tevent_req *, tevent_req_fn, void *) +tevent_req_set_cancel_fn: void (struct tevent_req *, tevent_req_cancel_fn) +tevent_req_set_endtime: bool (struct tevent_req *, struct tevent_context *, struct timeval) +tevent_req_set_print_fn: void (struct tevent_req *, tevent_req_print_fn) +tevent_sa_info_queue_count: size_t (void) +tevent_set_abort_fn: void (void (*)(const char *)) +tevent_set_debug: int (struct tevent_context *, void (*)(void *, enum tevent_debug_level, const char *, va_list), void *) +tevent_set_debug_stderr: int (struct tevent_context *) +tevent_set_default_backend: void (const char *) +tevent_set_trace_callback: void (struct tevent_context *, tevent_trace_callback_t, void *) +tevent_signal_support: bool (struct tevent_context *) +tevent_timeval_add: struct timeval (const struct timeval *, uint32_t, uint32_t) +tevent_timeval_compare: int (const struct timeval *, const struct timeval *) +tevent_timeval_current: struct timeval (void) +tevent_timeval_current_ofs: struct timeval (uint32_t, uint32_t) +tevent_timeval_is_zero: bool (const struct timeval *) +tevent_timeval_set: struct timeval (uint32_t, uint32_t) +tevent_timeval_until: struct timeval (const struct timeval *, const struct timeval *) +tevent_timeval_zero: struct timeval (void) +tevent_trace_point_callback: void (struct tevent_context *, enum tevent_trace_point) +tevent_wakeup_recv: bool (struct tevent_req *) +tevent_wakeup_send: struct tevent_req *(TALLOC_CTX *, struct tevent_context *, struct timeval) diff --git a/lib/tevent/wscript b/lib/tevent/wscript index 39f2ae4..3fc87f5 100755 --- a/lib/tevent/wscript +++ b/lib/tevent/wscript @@ -1,7 +1,7 @@ #!/usr/bin/env python APPNAME = 'tevent' -VERSION = '0.9.19' +VERSION = '0.9.20' blddir = 'bin' -- 1.7.9.5