From e365aa28d4f30b3d98118ab460c856d3aa72c75e Mon Sep 17 00:00:00 2001 From: Willy Tarreau Date: Fri, 27 Aug 2021 23:16:58 +0200 Subject: [PATCH] BUG/MINOR: time: fix idle time computation for long sleeps 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 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/haproxy/time.h b/include/haproxy/time.h index a556af2a5..4a3feb5df 100644 --- a/include/haproxy/time.h +++ b/include/haproxy/time.h @@ -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; }