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 <[email protected]>
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 <[email protected]>
    Autobuild-Date(master): Fri Jun  8 20:47:41 CEST 2012 on sn-devel-104

commit ba65400c6ee710b8b5857af5825a784b5c2d0d47
Author: Stefan Metzmacher <[email protected]>
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 <[email protected]>
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 <[email protected]>
    Signed-off-by: Martin Schwenke <[email protected]>
    Signed-off-by: Stefan Metzmacher <[email protected]>

commit 653cb76edfc3e9c2c426a6f8ec6ecfb253bd54d9
Author: Martin Schwenke <[email protected]>
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 <[email protected]>
    Signed-off-by: Stefan Metzmacher <[email protected]>

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

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

Reply via email to