From d9b744104eadd33f5611b2779a82447cf7bc1b3a Mon Sep 17 00:00:00 2001 From: Willy Tarreau Date: Mon, 14 May 2007 03:16:06 +0200 Subject: [PATCH] [MINOR] allow null timeouts for past events in select --- src/ev_select.c | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/ev_select.c b/src/ev_select.c index fb5cc41ea..1b897de2e 100644 --- a/src/ev_select.c +++ b/src/ev_select.c @@ -90,12 +90,14 @@ REGPRM2 static void _do_poll(struct poller *p, struct timeval *exp) /* allow select to return immediately when needed */ delta.tv_sec = delta.tv_usec = 0; if (tv_isset(exp)) { - tv_remain(&now, exp, &delta); - /* To avoid eventual select loops due to timer precision */ - delta.tv_usec += SCHEDULER_RESOLUTION * 1000; - if (delta.tv_usec >= 1000000) { - delta.tv_usec -= 1000000; - delta.tv_sec ++; + if (tv_islt(&now, exp)) { + tv_remain(&now, exp, &delta); + /* To avoid eventual select loops due to timer precision */ + delta.tv_usec += SCHEDULER_RESOLUTION * 1000; + if (delta.tv_usec >= 1000000) { + delta.tv_usec -= 1000000; + delta.tv_sec ++; + } } }