From 9b0f0d146f406bffa611d60d3779eb9442c361d3 Mon Sep 17 00:00:00 2001 From: Willy Tarreau Date: Fri, 15 Jul 2022 19:38:52 +0200 Subject: [PATCH] BUG/MINOR: threads: produce correct global mask for tgroup > 1 In thread_resolve_group_mask(), if a global thread number is passed and it belongs to a group greater than 1, an incorrect shift resulted in shifting that ID again which made it appear nowhere or in a wrong group possibly. The bug was introduced in 2.5 with commit 627def9e5 ("MINOR: threads: add a new function to resolve config groups and masks") though the groups only starts to be usable in 2.7, so there is no impact for this bug, hence no backport is needed. --- src/thread.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/thread.c b/src/thread.c index 28cfa9de0..1cf0a746f 100644 --- a/src/thread.c +++ b/src/thread.c @@ -1156,7 +1156,7 @@ int thread_resolve_group_mask(uint igid, ulong imask, uint *ogid, ulong *omask, /* we have a valid group, convert this to global thread IDs */ *ogid = igid; - *omask = imask << ha_tgroup_info[igid - 1].base; + *omask = imask & (ha_tgroup_info[igid - 1].threads_enabled << ha_tgroup_info[igid - 1].base); return 0; } } else {