]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
BUG/MINOR: time: fix idle time computation for long sleeps
authorWilly Tarreau <w@1wt.eu>
Fri, 27 Aug 2021 21:16:58 +0000 (23:16 +0200)
committerWilly Tarreau <w@1wt.eu>
Fri, 27 Aug 2021 21:36:20 +0000 (23:36 +0200)
In 2.4 we extended the max poll time from 1s to 60s with commit
4f59d3861 ("MINOR: time: increase the minimum wakeup interval to 60s").

This had the consequence that the calculation of the idle time percentage
may overflow during the multiply by 100 if the thread had slept 43s or
more. Let's change this to a 64 bit computation. This will have no
performance impact since this is done at most twice per second.

This should fix github issue #1366.

This must be backported to 2.4.

include/haproxy/time.h

index a556af2a50dcc283e888b40471f60c46a5ed974a..4a3feb5df72ac1a79e5bba67c513b5d351c6a0fb 100644 (file)
@@ -577,7 +577,7 @@ static inline void measure_idle()
        if (samp_time < 500000)
                return;
 
-       ti->idle_pct = (100 * idle_time + samp_time / 2) / samp_time;
+       ti->idle_pct = (100ULL * idle_time + samp_time / 2) / samp_time;
        idle_time = samp_time = 0;
 }