Attached is a patch that makes event_base_loop() return 2 if it returns because of a prior call to event_base_loopexit() or event_base_loopbreak(). This is useful when the caller calls event_base_loop(base, EVLOOP_ONCE) repeatedly (to do stuff in between events) and need to know if it should exit.
Patch is against 2.0.2-alpha. -khc
--- event.c.orig 2009-07-24 20:42:30.000000000 -0700 +++ event.c 2009-08-11 16:23:40.000000000 -0700 @@ -834,12 +834,12 @@ event_base_loop(struct event_base *base, /* Terminate the loop if we have been asked to */ if (base->event_gotterm) { base->event_gotterm = 0; - break; + return (EVLOOP_RET_BREAK); } if (base->event_break) { base->event_break = 0; - break; + return (EVLOOP_RET_BREAK); } timeout_correct(base, &tv); @@ -858,7 +858,7 @@ event_base_loop(struct event_base *base, /* If we have no events, we just exit */ if (!event_haveevents(base) && !base->event_count_active) { event_debug(("%s: no events registered.", __func__)); - return (1); + return (EVLOOP_RET_NO_EVENTS); } /* update last old time */ --- include/event2/event.h.orig 2009-07-24 20:42:30.000000000 -0700 +++ include/event2/event.h 2009-08-11 16:23:23.000000000 -0700 @@ -254,6 +254,9 @@ int event_base_set(struct event_base *, /*...@{*/ #define EVLOOP_ONCE 0x01 /**< Block at most once. */ #define EVLOOP_NONBLOCK 0x02 /**< Do not block. */ + +#define EVLOOP_RET_NO_EVENTS 1 /**< No events registered */ +#define EVLOOP_RET_BREAK 2 /**< Loop exit was requested */ /*...@}*/ /** @@ -263,9 +266,10 @@ int event_base_set(struct event_base *, @param eb the event_base structure returned by event_init() @param flags any combination of EVLOOP_ONCE | EVLOOP_NONBLOCK - @return 0 if successful, -1 if an error occurred, or 1 if no events were - registered. - @see event_loopexit(), event_base_loop() + @return 0 if successful, -1 if an error occurred, EVLOOP_RET_NO_EVENTS if + no events were registered, or EVLOOP_RET_BREAK if + event_base_loopexit()/event_base_loopbreak() was called + @see event_base_loopexit(), event_base_loop() */ int event_base_loop(struct event_base *, int);
_______________________________________________ Libevent-users mailing list Libevent-users@monkey.org http://monkeymail.org/mailman/listinfo/libevent-users