diff options
author | Nick Mathewson <nickm@torproject.org> | 2012-03-25 18:54:40 -0400 |
---|---|---|
committer | Nick Mathewson <nickm@torproject.org> | 2012-03-25 18:54:40 -0400 |
commit | c5732fddb0e58004b56a0283579b4c89ea64350b (patch) | |
tree | aa88114550e20474e46ac5cb38201822af865b75 | |
parent | 5626092c58af803d58400c03931932dc6191e7d2 (diff) | |
download | libevent-c5732fddb0e58004b56a0283579b4c89ea64350b.tar.gz |
Add event_base_get_running_event() to get the event* whose cb we are in
-rw-r--r-- | event.c | 11 | ||||
-rw-r--r-- | include/event2/event.h | 7 | ||||
-rw-r--r-- | test/regress.c | 1 |
3 files changed, 19 insertions, 0 deletions
@@ -1921,6 +1921,17 @@ event_self_cbarg(void) } struct event * +event_base_get_running_event(struct event_base *base) +{ + struct event *ev = NULL; + EVBASE_ACQUIRE_LOCK(base, th_base_lock); + if (EVBASE_IN_THREAD(base)) + ev = base->current_event; + EVBASE_RELEASE_LOCK(base, th_base_lock); + return ev; +} + +struct event * event_new(struct event_base *base, evutil_socket_t fd, short events, void (*cb)(evutil_socket_t, short, void *), void *arg) { struct event *ev; diff --git a/include/event2/event.h b/include/event2/event.h index d209c815..9685e0a2 100644 --- a/include/event2/event.h +++ b/include/event2/event.h @@ -1061,6 +1061,13 @@ void event_active(struct event *ev, int res, short ncalls); */ int event_pending(const struct event *ev, short events, struct timeval *tv); +/** + If called from within the callback for an event, returns that event. + + The behavior of this function is not defined when called from outside the + callback function for an event. + */ +struct event *event_base_get_running_event(struct event_base *base); /** Test if an event structure might be initialized. diff --git a/test/regress.c b/test/regress.c index fe6862fc..49c40efd 100644 --- a/test/regress.c +++ b/test/regress.c @@ -1250,6 +1250,7 @@ event_selfarg_cb(evutil_socket_t fd, short event, void *arg) struct event_base *base = event_get_base(ev); event_base_assert_ok_(base); event_base_loopexit(base, NULL); + tt_want(ev == event_base_get_running_event(base)); } static void |