BUG/MINOR: checks/threads: use ha_random() and not rand()
In order to honor spread_checks we currently call rand() which is not
thread safe and which must never turn its internal state to zero. This
is not thread safe, let's use ha_random() instead. This is a complement
to commimt 52bf839394 ("BUG/MEDIUM: random: implement a thread-safe and
process-safe PRNG") and may be backported with it.
(cherry picked from commit 5a6d3e797edc7ac52560cc1a5bd90a984b6b350b)
Signed-off-by: Willy Tarreau <w@1wt.eu>
(cherry picked from commit 392b146860afc24bb7d13654c76eb14b3f2a2b8f)
Signed-off-by: Willy Tarreau <w@1wt.eu>
diff --git a/src/checks.c b/src/checks.c
index 450a0d1..9a69aed 100644
--- a/src/checks.c
+++ b/src/checks.c
@@ -2199,7 +2199,7 @@
rv = 0;
if (global.spread_checks > 0) {
rv = srv_getinter(check) * global.spread_checks / 100;
- rv -= (int) (2 * rv * (rand() / (RAND_MAX + 1.0)));
+ rv -= (int) (2 * rv * (ha_random32() / 4294967295.0));
}
t->expire = tick_add(now_ms, MS_TO_TICKS(srv_getinter(check) + rv));
}
@@ -2407,7 +2407,7 @@
rv = 0;
if (global.spread_checks > 0) {
rv = srv_getinter(check) * global.spread_checks / 100;
- rv -= (int) (2 * rv * (rand() / (RAND_MAX + 1.0)));
+ rv -= (int) (2 * rv * (ha_random32() / 4294967295.0));
}
t->expire = tick_add(now_ms, MS_TO_TICKS(srv_getinter(check) + rv));
}