[PATCHES] some new tevent features

Volker Lendecke Volker.Lendecke at SerNet.DE
Tue Dec 10 01:52:44 MST 2013


On Tue, Dec 10, 2013 at 09:16:05AM +0100, Stefan (metze) Metzmacher wrote:
> >From 7adc135ec72e189a89f5bbf69066088374ced87d Mon Sep 17 00:00:00 2001
> From: Stefan Metzmacher <metze at samba.org>
> 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.

Reviewed-by: Volker Lendecke <vl at samba.org>

> 
> Signed-off-by: Stefan Metzmacher <metze at samba.org>
> ---
>  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 <metze at samba.org>
> 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.

Reviewed-by: Volker Lendecke <vl at samba.org>

> 
> Signed-off-by: Stefan Metzmacher <metze at samba.org>
> ---
>  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 <metze at samba.org>
> 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.

Reviewed-by: Volker Lendecke <vl at samba.org>

> 
> Signed-off-by: Stefan Metzmacher <metze at samba.org>
> ---
>  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 <metze at samba.org>
> 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.

Are we 100% sure that no tevent_req user already does this?

> Signed-off-by: Stefan Metzmacher <metze at samba.org>
> ---
>  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 <gbeck at sernet.de>
> Date: Thu, 19 Sep 2013 15:14:25 +0200
> Subject: [PATCH 05/14] tevent: add tevent_queue_wait_send/recv()
> 

Reviewed-by: Volker Lendecke <vl at samba.org>

> Pair-Programmed-With: Stefan Metzmacher <metze at samba.org>
> 
> Signed-off-by: Gregor Beck <gbeck at sernet.de>
> Signed-off-by: Stefan Metzmacher <metze at samba.org>
> Reviewed-by: Stefan Metzmacher <metze at samba.org>
> ---
>  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 <metze at samba.org>
> 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 <metze at samba.org>
> ---
>  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 <metze at samba.org>
> 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

In most code I write, I use different formatting that uses
one less line. Just a comment, not blocking the

Reviewed-by: Volker Lendecke <vl at samba.org>

> 
> Signed-off-by: Stefan Metzmacher <metze at samba.org>
> ---
>  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 <metze at samba.org>
> 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
> 

Same as above.

Reviewed-by: Volker Lendecke <vl at samba.org>

> Signed-off-by: Stefan Metzmacher <metze at samba.org>
> ---
>  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 <metze at samba.org>
> 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 <metze at samba.org>

Reviewed-by: Volker Lendecke <vl at samba.org>

> ---
>  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 <metze at samba.org>
> 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
> 

Same formatting comment as above.

Reviewed-by: Volker Lendecke <vl at samba.org>

> Signed-off-by: Stefan Metzmacher <metze at samba.org>
> ---
>  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 <metze at samba.org>
> 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
> 

This is a slight change in behaviour if anything is NULL.
Now we abort and don't just return false. Is that intended?

> Signed-off-by: Stefan Metzmacher <metze at samba.org>
> ---
>  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 <metze at samba.org>
> 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.

Reviewed-by: Volker Lendecke <vl at samba.org>

> 
> Bug: https://bugzilla.samba.org/show_bug.cgi?id=10214
> Signed-off-by: Stefan Metzmacher <metze at samba.org>
> ---
>  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 <petr at vandrovec.name>
>    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 <metze at samba.org>
> 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.

Reviewed-by: Volker Lendecke <vl at samba.org>

> 
> Bug: https://bugzilla.samba.org/show_bug.cgi?id=10214
> Signed-off-by: Stefan Metzmacher <metze at samba.org>
> ---
>  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 <metze at samba.org>
> 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()

Reviewed-by: Volker Lendecke <vl at samba.org>

> 
> Signed-off-by: Stefan Metzmacher <metze at samba.org>
> ---
>  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
> 


-- 
SerNet GmbH, Bahnhofsallee 1b, 37081 Göttingen
phone: +49-551-370000-0, fax: +49-551-370000-9
AG Göttingen, HRB 2816, GF: Dr. Johannes Loxen
http://www.sernet.de, mailto:kontakt at sernet.de


More information about the samba-technical mailing list