]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
BUG/MEDIUM: fd/threads: fix incorrect thread selection in wakeup broadcast
authorWilly Tarreau <w@1wt.eu>
Tue, 19 Jul 2022 13:58:00 +0000 (15:58 +0200)
committerWilly Tarreau <w@1wt.eu>
Tue, 19 Jul 2022 14:01:04 +0000 (16:01 +0200)
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

index b4b3d7b48dfd68e2d1f15d0894ee22806fc84730..634a6a33b5188dd2d67fb086b4dc7243151c5a58 100644 (file)
--- 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);