The result of gettime is not used if the timetree is empty (and might
cause a context switch to get the system clock).
--Trond
Index: event.c
===================================================================
--- event.c (revision 440)
+++ event.c (working copy)
@@ -804,24 +804,26 @@
void
timeout_process(struct event_base *base)
{
- struct timeval now;
- struct event *ev, *next;
+ if (!RB_EMPTY(&base->timetree)) {
+ struct timeval now;
+ struct event *ev, *next;
- gettime(&now);
+ gettime(&now);
- for (ev = RB_MIN(event_tree, &base->timetree); ev; ev = next) {
- if (timercmp(&ev->ev_timeout, &now, >))
- break;
- next = RB_NEXT(event_tree, &base->timetree, ev);
+ for (ev = RB_MIN(event_tree, &base->timetree); ev; ev = next) {
+ if (timercmp(&ev->ev_timeout, &now, >))
+ break;
+ next = RB_NEXT(event_tree, &base->timetree, ev);
- event_queue_remove(base, ev, EVLIST_TIMEOUT);
+ event_queue_remove(base, ev, EVLIST_TIMEOUT);
- /* delete this event from the I/O queues */
- event_del(ev);
+ /* delete this event from the I/O queues */
+ event_del(ev);
- event_debug(("timeout_process: call %p",
- ev->ev_callback));
- event_active(ev, EV_TIMEOUT, 1);
+ event_debug(("timeout_process: call %p",
+ ev->ev_callback));
+ event_active(ev, EV_TIMEOUT, 1);
+ }
}
}
_______________________________________________
Libevent-users mailing list
Libevent-users@monkey.org
http://monkey.org/mailman/listinfo/libevent-users