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
[email protected]
http://monkeymail.org/mailman/listinfo/libevent-users