summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--event.310
-rw-r--r--event.c15
-rw-r--r--event.h1
-rw-r--r--log.c6
4 files changed, 25 insertions, 7 deletions
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));
}
}