On Sat, Nov 10, 2007 at 06:49:58PM -0800, Christopher Layne wrote: > On Sat, Nov 10, 2007 at 06:44:12PM -0800, Christopher Layne wrote: > > 11. here's the funny part: evsignal_process() increments event_count_active > > - but since our
Here's a better patch: This removes docount entirely. docount is used to determine if the event being added or removed from the queue should influence base->event_count. The internal signal event should not be counted as an event to wait for - such that when one deletes all their events the event loop will not count the internal signal event as something to wait around for (nothing changes here). However, based on the previous discussion, it still needs to be processed as a normal active event, hence we change base->event_count_active regardless of if it's internal or not. -cl Index: event.c =================================================================== --- event.c (revision 507) +++ event.c (working copy) @@ -829,23 +829,17 @@ void event_queue_remove(struct event_base *base, struct event *ev, int queue) { - int docount = 1; - if (!(ev->ev_flags & queue)) event_errx(1, "%s: %p(fd %d) not on queue %x", __func__, ev, ev->ev_fd, queue); - if (ev->ev_flags & EVLIST_INTERNAL) - docount = 0; - - if (docount) + if (~ev->ev_flags & EVLIST_INTERNAL) base->event_count--; 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; @@ -866,8 +860,6 @@ void event_queue_insert(struct event_base *base, struct event *ev, int queue) { - int docount = 1; - if (ev->ev_flags & queue) { /* Double insertion is possible for active events */ if (queue & EVLIST_ACTIVE) @@ -877,17 +869,13 @@ ev, ev->ev_fd, queue); } - if (ev->ev_flags & EVLIST_INTERNAL) - docount = 0; - - if (docount) + if (~ev->ev_flags & EVLIST_INTERNAL) base->event_count++; ev->ev_flags |= queue; switch (queue) { case EVLIST_ACTIVE: - if (docount) - base->event_count_active++; + base->event_count_active++; TAILQ_INSERT_TAIL(base->activequeues[ev->ev_pri], ev,ev_active_next); break; _______________________________________________ Libevent-users mailing list Libevent-users@monkey.org http://monkeymail.org/mailman/listinfo/libevent-users