[SCM] Samba Shared Repository - branch master updated

Stefan Metzmacher metze at samba.org
Fri Jun 8 12:48:04 MDT 2012


The branch, master has been updated
       via  b725154 tevent: change version to 0.9.16
       via  ba65400 tevent: expose tevent_context_init_ops
       via  796acbd lib/tevent: Add trace point callback
       via  653cb76 lib/tevent: In poll_event_context, add a pointer back to the tevent_context
      from  41d830e s3:smbd: remove unnecessary variable readret from read_file()

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit b725154fe7c49254093661d634c41f3fbfa46678
Author: Stefan Metzmacher <metze at samba.org>
Date:   Fri Jun 8 12:50:21 2012 +0200

    tevent: change version to 0.9.16
    
    This adds tevent_*_trace_*() and tevent_context_init_ops()
    
    metze
    
    Autobuild-User(master): Stefan Metzmacher <metze at samba.org>
    Autobuild-Date(master): Fri Jun  8 20:47:41 CEST 2012 on sn-devel-104

commit ba65400c6ee710b8b5857af5825a784b5c2d0d47
Author: Stefan Metzmacher <metze at samba.org>
Date:   Fri May 11 15:19:55 2012 +0200

    tevent: expose tevent_context_init_ops
    
    This can be used to implement wrapper backends,
    while passing a private pointer to the backens init function
    via ev->additional_data.
    
    metze

commit 796acbd9ffd20f13f320641b8a27f86624f3d701
Author: Martin Schwenke <martin at meltin.net>
Date:   Tue Jun 5 16:00:07 2012 +1000

    lib/tevent: Add trace point callback
    
    Set/get a single callback function to be invoked at various trace
    points.  Define "before wait" and "after wait" trace points - more
    trace points can be added later if required.
    
    CTDB wants this to log long waits and events.
    
    Pair-programmed-with: Amitay Isaacs <amitay at gmail.com>
    Signed-off-by: Martin Schwenke <martin at meltin.net>
    Signed-off-by: Stefan Metzmacher <metze at samba.org>

commit 653cb76edfc3e9c2c426a6f8ec6ecfb253bd54d9
Author: Martin Schwenke <martin at meltin.net>
Date:   Thu Jun 7 12:26:02 2012 +1000

    lib/tevent: In poll_event_context, add a pointer back to the tevent_context
    
    This makes it consistent with the other backends.
    
    Signed-off-by: Martin Schwenke <martin at meltin.net>
    Signed-off-by: Stefan Metzmacher <metze at samba.org>

-----------------------------------------------------------------------

Summary of changes:
 .../ABI/{tevent-0.9.14.sigs => tevent-0.9.16.sigs} |    4 ++
 lib/tevent/tevent.c                                |    8 ++-
 lib/tevent/tevent.h                                |   57 ++++++++++++++++++++
 lib/tevent/tevent_debug.c                          |   23 ++++++++
 lib/tevent/tevent_epoll.c                          |    2 +
 lib/tevent/tevent_internal.h                       |    8 +++
 lib/tevent/tevent_poll.c                           |    6 ++
 lib/tevent/tevent_select.c                         |    2 +
 lib/tevent/tevent_standard.c                       |    2 +
 lib/tevent/wscript                                 |    2 +-
 10 files changed, 110 insertions(+), 4 deletions(-)
 copy lib/tevent/ABI/{tevent-0.9.14.sigs => tevent-0.9.16.sigs} (94%)
 mode change 100644 => 100755 lib/tevent/wscript


Changeset truncated at 500 lines:

diff --git a/lib/tevent/ABI/tevent-0.9.14.sigs b/lib/tevent/ABI/tevent-0.9.16.sigs
similarity index 94%
copy from lib/tevent/ABI/tevent-0.9.14.sigs
copy to lib/tevent/ABI/tevent-0.9.16.sigs
index 13c461c..ea7f944 100644
--- a/lib/tevent/ABI/tevent-0.9.14.sigs
+++ b/lib/tevent/ABI/tevent-0.9.16.sigs
@@ -33,11 +33,13 @@ 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_queue_add: bool (struct tevent_queue *, struct tevent_context *, struct tevent_req *, tevent_queue_trigger_fn_t, void *)
@@ -65,6 +67,7 @@ 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 *)
@@ -74,5 +77,6 @@ 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/tevent.c b/lib/tevent/tevent.c
index 5247b5e..61ffc7e 100644
--- a/lib/tevent/tevent.c
+++ b/lib/tevent/tevent.c
@@ -210,8 +210,9 @@ int tevent_common_context_destructor(struct tevent_context *ev)
 
   NOTE: use tevent_context_init() inside of samba!
 */
-static struct tevent_context *tevent_context_init_ops(TALLOC_CTX *mem_ctx,
-						      const struct tevent_ops *ops)
+struct tevent_context *tevent_context_init_ops(TALLOC_CTX *mem_ctx,
+					       const struct tevent_ops *ops,
+					       void *additional_data)
 {
 	struct tevent_context *ev;
 	int ret;
@@ -222,6 +223,7 @@ static struct tevent_context *tevent_context_init_ops(TALLOC_CTX *mem_ctx,
 	talloc_set_destructor(ev, tevent_common_context_destructor);
 
 	ev->ops = ops;
+	ev->additional_data = additional_data;
 
 	ret = ev->ops->context_init(ev);
 	if (ret != 0) {
@@ -253,7 +255,7 @@ struct tevent_context *tevent_context_init_byname(TALLOC_CTX *mem_ctx,
 
 	for (e=tevent_backends;e;e=e->next) {
 		if (strcmp(name, e->name) == 0) {
-			return tevent_context_init_ops(mem_ctx, e->ops);
+			return tevent_context_init_ops(mem_ctx, e->ops, NULL);
 		}
 	}
 	return NULL;
diff --git a/lib/tevent/tevent.h b/lib/tevent/tevent.h
index c38f7c3..dc61912 100644
--- a/lib/tevent/tevent.h
+++ b/lib/tevent/tevent.h
@@ -126,6 +126,20 @@ struct tevent_context *tevent_context_init(TALLOC_CTX *mem_ctx);
 struct tevent_context *tevent_context_init_byname(TALLOC_CTX *mem_ctx, const char *name);
 
 /**
+ * @brief Create a custom event context
+ *
+ * @param[in]  mem_ctx  The memory context to use.
+ * @param[in]  ops      The function pointer table of the backend.
+ * @param[in]  additional_data  The additional/private data to this instance
+ *
+ * @return              An allocated tevent context, NULL on error.
+ *
+ */
+struct tevent_context *tevent_context_init_ops(TALLOC_CTX *mem_ctx,
+					       const struct tevent_ops *ops,
+					       void *additional_data);
+
+/**
  * @brief List available backends.
  *
  * @param[in]  mem_ctx  The memory context to use.
@@ -501,6 +515,49 @@ int tevent_set_debug(struct tevent_context *ev,
  */
 int tevent_set_debug_stderr(struct tevent_context *ev);
 
+enum tevent_trace_point {
+	/**
+	 * Corresponds to a trace point just before waiting
+	 */
+	TEVENT_TRACE_BEFORE_WAIT,
+	/**
+	 * Corresponds to a trace point just after waiting
+	 */
+	TEVENT_TRACE_AFTER_WAIT,
+};
+
+typedef void (*tevent_trace_callback_t)(enum tevent_trace_point,
+					void *private_data);
+
+/**
+ * Register a callback to be called at certain trace points
+ *
+ * @param[in] ev             Event context
+ * @param[in] cb             Trace callback
+ * @param[in] private_data   Data to be passed to callback
+ *
+ * @note The callback will be called at trace points defined by
+ * tevent_trace_point.  Call with NULL to reset.
+ */
+void tevent_set_trace_callback(struct tevent_context *ev,
+			       tevent_trace_callback_t cb,
+			       void *private_data);
+
+/**
+ * Retrieve the current trace callback
+ *
+ * @param[in] ev             Event context
+ * @param[out] cb            Registered trace callback
+ * @param[out] private_data  Registered data to be passed to callback
+ *
+ * @note This can be used to allow one component that wants to
+ * register a callback to respect the callback that another component
+ * has already registered.
+ */
+void tevent_get_trace_callback(struct tevent_context *ev,
+			       tevent_trace_callback_t *cb,
+			       void *private_data);
+
 /**
  * @}
  */
diff --git a/lib/tevent/tevent_debug.c b/lib/tevent/tevent_debug.c
index 3f41128..31da7b9 100644
--- a/lib/tevent/tevent_debug.c
+++ b/lib/tevent/tevent_debug.c
@@ -94,3 +94,26 @@ void tevent_debug(struct tevent_context *ev, enum tevent_debug_level level,
 	va_end(ap);
 }
 
+void tevent_set_trace_callback(struct tevent_context *ev,
+			       tevent_trace_callback_t cb,
+			       void *private_data)
+{
+	ev->tracing.callback = cb;
+	ev->tracing.private_data = private_data;
+}
+
+void tevent_get_trace_callback(struct tevent_context *ev,
+			       tevent_trace_callback_t *cb,
+			       void *private_data)
+{
+	*cb = ev->tracing.callback;
+	*(void**)private_data = ev->tracing.private_data;
+}
+
+void tevent_trace_point_callback(struct tevent_context *ev,
+				 enum tevent_trace_point tp)
+{
+	if (ev->tracing.callback != NULL) {
+		ev->tracing.callback(tp, ev->tracing.private_data);
+	}
+}
diff --git a/lib/tevent/tevent_epoll.c b/lib/tevent/tevent_epoll.c
index 33e1d3f..5f93de2 100644
--- a/lib/tevent/tevent_epoll.c
+++ b/lib/tevent/tevent_epoll.c
@@ -264,7 +264,9 @@ static int epoll_event_loop(struct epoll_event_context *epoll_ev, struct timeval
 		return 0;
 	}
 
+	tevent_trace_point_callback(epoll_ev->ev, TEVENT_TRACE_BEFORE_WAIT);
 	ret = epoll_wait(epoll_ev->epoll_fd, events, MAXEVENTS, timeout);
+	tevent_trace_point_callback(epoll_ev->ev, TEVENT_TRACE_AFTER_WAIT);
 
 	if (ret == -1 && errno == EINTR && epoll_ev->ev->signal_events) {
 		if (tevent_common_check_signal(epoll_ev->ev)) {
diff --git a/lib/tevent/tevent_internal.h b/lib/tevent/tevent_internal.h
index 472beb5..877510f 100644
--- a/lib/tevent/tevent_internal.h
+++ b/lib/tevent/tevent_internal.h
@@ -258,6 +258,11 @@ struct tevent_context {
 		tevent_nesting_hook hook_fn;
 		void *hook_private;
 	} nesting;
+
+	struct {
+		tevent_trace_callback_t callback;
+		void *private_data;
+	} tracing;
 };
 
 
@@ -313,3 +318,6 @@ bool tevent_poll_init(void);
 #ifdef HAVE_EPOLL
 bool tevent_epoll_init(void);
 #endif
+
+void tevent_trace_point_callback(struct tevent_context *ev,
+				 enum tevent_trace_point);
diff --git a/lib/tevent/tevent_poll.c b/lib/tevent/tevent_poll.c
index d2e45c8..7ae3c42 100644
--- a/lib/tevent/tevent_poll.c
+++ b/lib/tevent/tevent_poll.c
@@ -30,6 +30,9 @@
 #include "tevent_internal.h"
 
 struct poll_event_context {
+	/* a pointer back to the generic event_context */
+	struct tevent_context *ev;
+
 	/*
 	 * These two arrays are maintained together.
 	 */
@@ -52,6 +55,7 @@ static int poll_event_context_init(struct tevent_context *ev)
 	if (poll_ev == NULL) {
 		return -1;
 	}
+	poll_ev->ev = ev;
 	ev->additional_data = poll_ev;
 	return 0;
 }
@@ -197,7 +201,9 @@ static int poll_event_loop_poll(struct tevent_context *ev,
 		timeout += (tvalp->tv_usec + 999) / 1000;
 	}
 
+	tevent_trace_point_callback(poll_ev->ev, TEVENT_TRACE_BEFORE_WAIT);
 	pollrtn = poll(poll_ev->fds, poll_ev->num_fds, timeout);
+	tevent_trace_point_callback(poll_ev->ev, TEVENT_TRACE_AFTER_WAIT);
 
 	if (pollrtn == -1 && errno == EINTR && ev->signal_events) {
 		tevent_common_check_signal(ev);
diff --git a/lib/tevent/tevent_select.c b/lib/tevent/tevent_select.c
index 94faa86..c11f0e8 100644
--- a/lib/tevent/tevent_select.c
+++ b/lib/tevent/tevent_select.c
@@ -167,7 +167,9 @@ static int select_event_loop_select(struct select_event_context *select_ev, stru
 		return 0;
 	}
 
+	tevent_trace_point_callback(select_ev->ev, TEVENT_TRACE_BEFORE_WAIT);
 	selrtn = select(select_ev->maxfd+1, &r_fds, &w_fds, NULL, tvalp);
+	tevent_trace_point_callback(select_ev->ev, TEVENT_TRACE_AFTER_WAIT);
 
 	if (selrtn == -1 && errno == EINTR && 
 	    select_ev->ev->signal_events) {
diff --git a/lib/tevent/tevent_standard.c b/lib/tevent/tevent_standard.c
index e2ca44f..1e33720 100644
--- a/lib/tevent/tevent_standard.c
+++ b/lib/tevent/tevent_standard.c
@@ -278,7 +278,9 @@ static int epoll_event_loop(struct std_event_context *std_ev, struct timeval *tv
 		return 0;
 	}
 
+	tevent_trace_point_callback(std_ev->ev, TEVENT_TRACE_BEFORE_WAIT);
 	ret = epoll_wait(std_ev->epoll_fd, events, MAXEVENTS, timeout);
+	tevent_trace_point_callback(std_ev->ev, TEVENT_TRACE_AFTER_WAIT);
 
 	if (ret == -1 && errno == EINTR && std_ev->ev->signal_events) {
 		if (tevent_common_check_signal(std_ev->ev)) {
diff --git a/lib/tevent/wscript b/lib/tevent/wscript
old mode 100644
new mode 100755
index 2e6c2a6..ef72849
--- a/lib/tevent/wscript
+++ b/lib/tevent/wscript
@@ -1,7 +1,7 @@
 #!/usr/bin/env python
 
 APPNAME = 'tevent'
-VERSION = '0.9.15'
+VERSION = '0.9.16'
 
 blddir = 'bin'
 


-- 
Samba Shared Repository


More information about the samba-cvs mailing list