From: Niels Provos Date: Sat, 2 Apr 2005 08:43:55 +0000 (+0000) Subject: event_base_loop and some event logging fixes. X-Git-Tag: release-1.1b~29 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=720f7fcc0d313af430d8a4ac1b4ed8e5bc53c5fc;p=libevent event_base_loop and some event logging fixes. svn:r140 --- diff --git a/event.3 b/event.3 index e6d41a58..bb8b7873 100644 --- a/event.3 +++ b/event.3 @@ -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 , diff --git a/event.c b/event.c index 7fec011b..c632a109 100644 --- a/event.c +++ b/event.c @@ -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; diff --git a/event.h b/event.h index 8ed23aeb..799a266e 100644 --- a/event.h +++ b/event.h @@ -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) diff --git a/log.c b/log.c index 6b5755f8..d3e0f69a 100644 --- a/log.c +++ b/log.c @@ -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)); } }