diff options
author | Willy Tarreau <w@1wt.eu> | 2007-05-14 02:02:04 +0200 |
---|---|---|
committer | Willy Tarreau <w@1wt.eu> | 2007-05-14 02:02:04 +0200 |
commit | bdefc513a04c2189745933bc73815f81fc637233 (patch) | |
tree | b97fe52087fcae66ed39a4a89beb90725fe569c4 /src/ev_sepoll.c | |
parent | aff694f3b65332324c9afd2ec5ed112e2aabb52e (diff) | |
download | haproxy-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.c | 8 |
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 */ |