event_base_loop and some event logging fixes.

svn:r140
This commit is contained in:
Niels Provos 2005-04-02 08:43:55 +00:00
parent 32bed8f9b6
commit 720f7fcc0d
4 changed files with 25 additions and 7 deletions

10
event.3
View File

@ -34,6 +34,8 @@
.Nm event_dispatch , .Nm event_dispatch ,
.Nm event_loop , .Nm event_loop ,
.Nm event_loopexit , .Nm event_loopexit ,
.Nm event_base_loop ,
.Nm event_base_loopexit ,
.Nm event_set , .Nm event_set ,
.Nm event_add , .Nm event_add ,
.Nm event_del , .Nm event_del ,
@ -81,6 +83,10 @@
.Fn "event_loop" "int flags" .Fn "event_loop" "int flags"
.Ft int .Ft int
.Fn "event_loopexit" "struct timeval *tv" .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 .Ft void
.Fn "event_set" "struct event *ev" "int fd" "short event" "void (*fn)(int, short, void *)" "void *arg" .Fn "event_set" "struct event *ev" "int fd" "short event" "void (*fn)(int, short, void *)" "void *arg"
.Ft int .Ft int
@ -421,8 +427,10 @@ When initializing the library via
an event base is returned. an event base is returned.
This event base can be used in conjunction with calls to This event base can be used in conjunction with calls to
.Fn event_base_set .Fn event_base_set
.Fn event_base_dispatch ,
.Fn event_base_loop ,
and and
.Fn event_base_dispatch . .Fn event_base_loopexit .
.Fn event_base_set .Fn event_base_set
should be called after preparing an event with should be called after preparing an event with
.Fn event_set , .Fn event_set ,

15
event.c
View File

@ -290,6 +290,13 @@ event_loopexit(struct timeval *tv)
current_base, 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 */ /* not thread safe */
int int
@ -347,8 +354,10 @@ event_base_loop(struct event_base *base, int flags)
timerclear(&tv); timerclear(&tv);
/* If we have no events, we just exit */ /* 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); return (1);
}
res = evsel->dispatch(base, evbase, &tv); res = evsel->dispatch(base, evbase, &tv);
@ -368,6 +377,7 @@ event_base_loop(struct event_base *base, int flags)
return (-1); return (-1);
} }
event_debug(("%s: asked to terminate loop.", __func__));
return (0); return (0);
} }
@ -715,8 +725,7 @@ event_queue_remove(struct event_base *base, struct event *ev, int queue)
ev->ev_flags &= ~queue; ev->ev_flags &= ~queue;
switch (queue) { switch (queue) {
case EVLIST_ACTIVE: case EVLIST_ACTIVE:
if (docount) base->event_count_active--;
base->event_count_active--;
TAILQ_REMOVE(base->activequeues[ev->ev_pri], TAILQ_REMOVE(base->activequeues[ev->ev_pri],
ev, ev_active_next); ev, ev_active_next);
break; break;

View File

@ -142,6 +142,7 @@ int event_base_set(struct event_base *, struct event *);
int event_loop(int); int event_loop(int);
int event_base_loop(struct event_base *, int); int event_base_loop(struct event_base *, int);
int event_loopexit(struct timeval *); /* Causes the loop to exit */ 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_add(ev, tv) event_add(ev, tv)
#define evtimer_set(ev, cb, arg) event_set(ev, -1, 0, cb, arg) #define evtimer_set(ev, cb, arg) event_set(ev, -1, 0, cb, arg)

6
log.c
View File

@ -162,9 +162,9 @@ _warn_helper(int severity, int log_errno, const char *fmt, va_list ap)
if (log_errno >= 0) { if (log_errno >= 0) {
len = strlen(buf); len = strlen(buf);
if (len < sizeof(buf)-3) { if (len < sizeof(buf) - 3) {
event_vsnprintf(buf+len, sizeof(buf)-len, ": %s", snprintf(buf + len, sizeof(buf) - len, ": %s",
strerror(log_errno)); strerror(log_errno));
} }
} }