diff options
-rw-r--r-- | event.3 | 10 | ||||
-rw-r--r-- | event.c | 15 | ||||
-rw-r--r-- | event.h | 1 | ||||
-rw-r--r-- | log.c | 6 |
4 files changed, 25 insertions, 7 deletions
@@ -34,6 +34,8 @@ .Nm event_dispatch , .Nm event_loop , .Nm event_loopexit , +.Nm event_base_loop , +.Nm event_base_loopexit , .Nm event_set , .Nm event_add , .Nm event_del , @@ -81,6 +83,10 @@ .Fn "event_loop" "int flags" .Ft int .Fn "event_loopexit" "struct timeval *tv" +.Ft int +.Fn "event_base_loop" "struct event_base *" "int flags" +.Ft int +.Fn "event_base_loopexit" "struct event_base *" "struct timeval *tv" .Ft void .Fn "event_set" "struct event *ev" "int fd" "short event" "void (*fn)(int, short, void *)" "void *arg" .Ft int @@ -421,8 +427,10 @@ When initializing the library via an event base is returned. This event base can be used in conjunction with calls to .Fn event_base_set +.Fn event_base_dispatch , +.Fn event_base_loop , and -.Fn event_base_dispatch . +.Fn event_base_loopexit . .Fn event_base_set should be called after preparing an event with .Fn event_set , @@ -290,6 +290,13 @@ event_loopexit(struct timeval *tv) current_base, tv)); } +int +event_base_loopexit(struct event_base *event_base, struct timeval *tv) +{ + return (event_once(-1, EV_TIMEOUT, event_loopexit_cb, + event_base, tv)); +} + /* not thread safe */ int @@ -347,8 +354,10 @@ event_base_loop(struct event_base *base, int flags) timerclear(&tv); /* If we have no events, we just exit */ - if (!event_haveevents(base)) + if (!event_haveevents(base)) { + event_debug(("%s: no events registered.", __func__)); return (1); + } res = evsel->dispatch(base, evbase, &tv); @@ -368,6 +377,7 @@ event_base_loop(struct event_base *base, int flags) return (-1); } + event_debug(("%s: asked to terminate loop.", __func__)); return (0); } @@ -715,8 +725,7 @@ event_queue_remove(struct event_base *base, struct event *ev, int queue) ev->ev_flags &= ~queue; switch (queue) { case EVLIST_ACTIVE: - if (docount) - base->event_count_active--; + base->event_count_active--; TAILQ_REMOVE(base->activequeues[ev->ev_pri], ev, ev_active_next); break; @@ -142,6 +142,7 @@ int event_base_set(struct event_base *, struct event *); int event_loop(int); int event_base_loop(struct event_base *, int); int event_loopexit(struct timeval *); /* Causes the loop to exit */ +int event_base_loopexit(struct event_base *, struct timeval *); #define evtimer_add(ev, tv) event_add(ev, tv) #define evtimer_set(ev, cb, arg) event_set(ev, -1, 0, cb, arg) @@ -162,9 +162,9 @@ _warn_helper(int severity, int log_errno, const char *fmt, va_list ap) if (log_errno >= 0) { len = strlen(buf); - if (len < sizeof(buf)-3) { - event_vsnprintf(buf+len, sizeof(buf)-len, ": %s", - strerror(log_errno)); + if (len < sizeof(buf) - 3) { + snprintf(buf + len, sizeof(buf) - len, ": %s", + strerror(log_errno)); } } |