]> granicus.if.org Git - libevent/commitdiff
Detect events with no ev_base; warn instead of crashing
authorNick Mathewson <nickm@torproject.org>
Mon, 23 Aug 2010 16:01:45 +0000 (12:01 -0400)
committerNick Mathewson <nickm@torproject.org>
Mon, 23 Aug 2010 16:01:45 +0000 (12:01 -0400)
event.c

diff --git a/event.c b/event.c
index dc1079f239bed971a15437c0c7936a40ed1cc139..e18b3b97011bdedcb7756897fe79e6732add26b8 100644 (file)
--- a/event.c
+++ b/event.c
@@ -1818,6 +1818,11 @@ event_add(struct event *ev, const struct timeval *tv)
 {
        int res;
 
+       if (EVUTIL_FAILURE_CHECK(!ev->ev_base)) {
+               event_warnx("%s: event has no event_base set.", __func__);
+               return -1;
+       }
+
        EVBASE_ACQUIRE_LOCK(ev->ev_base, th_base_lock);
 
        res = event_add_internal(ev, tv, 0);
@@ -2030,6 +2035,11 @@ event_del(struct event *ev)
 {
        int res;
 
+       if (EVUTIL_FAILURE_CHECK(!ev->ev_base)) {
+               event_warnx("%s: event has no event_base set.", __func__);
+               return -1;
+       }
+
        EVBASE_ACQUIRE_LOCK(ev->ev_base, th_base_lock);
 
        res = event_del_internal(ev);
@@ -2117,6 +2127,11 @@ event_del_internal(struct event *ev)
 void
 event_active(struct event *ev, int res, short ncalls)
 {
+       if (EVUTIL_FAILURE_CHECK(!ev->ev_base)) {
+               event_warnx("%s: event has no event_base set.", __func__);
+               return;
+       }
+
        EVBASE_ACQUIRE_LOCK(ev->ev_base, th_base_lock);
 
        _event_debug_assert_is_setup(ev);