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

Reply via email to