summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNick Mathewson <nickm@torproject.org>2012-03-25 18:54:40 -0400
committerNick Mathewson <nickm@torproject.org>2012-03-25 18:54:40 -0400
commitc5732fddb0e58004b56a0283579b4c89ea64350b (patch)
treeaa88114550e20474e46ac5cb38201822af865b75
parent5626092c58af803d58400c03931932dc6191e7d2 (diff)
downloadlibevent-c5732fddb0e58004b56a0283579b4c89ea64350b.tar.gz
Add event_base_get_running_event() to get the event* whose cb we are in
-rw-r--r--event.c11
-rw-r--r--include/event2/event.h7
-rw-r--r--test/regress.c1
3 files changed, 19 insertions, 0 deletions
diff --git a/event.c b/event.c
index 432d0060..bb4c4c88 100644
--- a/event.c
+++ b/event.c
@@ -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