summaryrefslogtreecommitdiff
path: root/src/ev_sepoll.c
diff options
context:
space:
mode:
authorWilly Tarreau <w@1wt.eu>2007-05-14 02:02:04 +0200
committerWilly Tarreau <w@1wt.eu>2007-05-14 02:02:04 +0200
commitbdefc513a04c2189745933bc73815f81fc637233 (patch)
treeb97fe52087fcae66ed39a4a89beb90725fe569c4 /src/ev_sepoll.c
parentaff694f3b65332324c9afd2ec5ed112e2aabb52e (diff)
downloadhaproxy-bdefc513a04c2189745933bc73815f81fc637233.tar.gz
[BUG] fix null timeouts in *poll-based pollers
Introduction of timeval timers broke *poll-based pollers, because the call to tv_ms_remain may return 0 while the event is not elapsed yet. Now we carefully check for those cases and round the result up by 1 ms.
Diffstat (limited to 'src/ev_sepoll.c')
-rw-r--r--src/ev_sepoll.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/src/ev_sepoll.c b/src/ev_sepoll.c
index 516c0f592..3e25866f8 100644
--- a/src/ev_sepoll.c
+++ b/src/ev_sepoll.c
@@ -380,10 +380,12 @@ REGPRM2 static void _do_poll(struct poller *p, struct timeval *exp)
wait_time = 0;
}
else {
- if (tv_isset(exp))
- wait_time = tv_ms_remain(&now, exp);
- else
+ if (tv_iseternity(exp))
wait_time = -1;
+ else if (tv_isge(&now, exp))
+ wait_time = 0;
+ else
+ wait_time = __tv_ms_elapsed(&now, exp) + 1;
}
/* now let's wait for real events */