From c1640f79fe54ba7abdb11ce5010de5e64602e387 Mon Sep 17 00:00:00 2001 From: Willy Tarreau Date: Tue, 19 Jul 2022 15:58:00 +0200 Subject: [PATCH] BUG/MEDIUM: fd/threads: fix incorrect thread selection in wakeup broadcast In commit cfdd20a0b ("MEDIUM: fd: support broadcasting updates for foreign groups in updt_fd_polling") we decided to pick a random thread number among a set of candidates for a wakeup in case we need an instant change. But the thread count range was wrong (MAX_THREADS) instead of tg->count, resulting in random crashes when thread groups are > 1 and MAX_THREADS > 64. No backport is needed, this was introduced in 2.7-dev2. --- src/fd.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/fd.c b/src/fd.c index b4b3d7b48d..634a6a33b5 100644 --- a/src/fd.c +++ b/src/fd.c @@ -486,7 +486,7 @@ void updt_fd_polling(const int fd) fd_add_to_fd_list(&update_list[tgrp - 1], fd); - thr = one_among_mask(fdtab[fd].thread_mask & tg->threads_enabled, statistical_prng_range(MAX_THREADS)); + thr = one_among_mask(fdtab[fd].thread_mask & tg->threads_enabled, statistical_prng_range(tg->count)); thr += ha_tgroup_info[tgrp - 1].base; wake_thread(thr); -- 2.39.5