From 96f02f7403a94e0b674e57cfd50f91cf763c7c5c Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Wed, 2 Feb 2005 10:24:47 +0000 Subject: r5170: fixed a bug handling events that have already timed out - they were being treated as events that never time out, so they happened on the next other event (This used to be commit 2eefe4f8dea4a9060f229417777435133c684a0c) --- source4/lib/events.c | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) (limited to 'source4') diff --git a/source4/lib/events.c b/source4/lib/events.c index 166cbe4509..ebfa164885 100644 --- a/source4/lib/events.c +++ b/source4/lib/events.c @@ -223,7 +223,7 @@ int event_loop_once(struct event_context *ev) struct loop_event *le; struct timed_event *te, *te_next; int selrtn; - struct timeval tval, t; + struct timeval tval, t, *tvalp=NULL; uint32_t destruction_count = ev->destruction_count; t = timeval_current(); @@ -264,13 +264,13 @@ int event_loop_once(struct event_context *ev) talloc_free(te); continue; } - tv = timeval_diff(&te->next_event, &t); - if (timeval_is_zero(&tval)) { + if (tvalp == NULL) { tval = tv; } else { tval = timeval_min(&tv, &tval); } + tvalp = &tval; } /* only do a select() if there're fd_events @@ -290,11 +290,7 @@ int event_loop_once(struct event_context *ev) * sys_select() with something in the events * structure - for now just use select() */ - if (timeval_is_zero(&tval)) { - selrtn = select(ev->maxfd+1, &r_fds, &w_fds, NULL, NULL); - } else { - selrtn = select(ev->maxfd+1, &r_fds, &w_fds, NULL, &tval); - } + selrtn = select(ev->maxfd+1, &r_fds, &w_fds, NULL, tvalp); t = timeval_current(); -- cgit