summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Tridgell <tridge@samba.org>2005-02-02 10:24:47 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 13:09:28 -0500
commit96f02f7403a94e0b674e57cfd50f91cf763c7c5c (patch)
tree79f5b8523f1848eba67a96a8d89e574d0408db17
parent578b6e5567db5c9378c5d9f175ba9987d8a5e1f9 (diff)
downloadsamba-96f02f7403a94e0b674e57cfd50f91cf763c7c5c.tar.gz
samba-96f02f7403a94e0b674e57cfd50f91cf763c7c5c.tar.bz2
samba-96f02f7403a94e0b674e57cfd50f91cf763c7c5c.zip
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)
-rw-r--r--source4/lib/events.c12
1 files changed, 4 insertions, 8 deletions
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();