]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
BUG/MINOR: threads: set at least grp_max when mtpg is too small
authorWilly Tarreau <w@1wt.eu>
Thu, 28 May 2026 15:15:57 +0000 (17:15 +0200)
committerWilly Tarreau <w@1wt.eu>
Thu, 28 May 2026 16:49:47 +0000 (18:49 +0200)
When starting, say, 128 threads with max-threads-per-group set to 2
and MAX_TGROUPS set to the default 32, instead of setting the resulting
number of groups to 32 and threads to 64, they're set to 1 and 32
respectively because the condition to raise grp_min is not satisfied.

Let's cut the condition in two parts to also permit to raise it at
least to grp_max.

This should be backported to 3.2.

src/thread.c

index 3aa4777821d6f122db483d9c9f2033819d6d6e3d..a3e362d521bf7fa03ccb15ccb7d8c93e922c95fd 100644 (file)
@@ -1713,9 +1713,12 @@ void thread_detect_count(void)
            thr_max > global.maxthrpertgroup * grp_max)
                thr_max = global.maxthrpertgroup * grp_max;
 
-       if (grp_min < (thr_min +  global.maxthrpertgroup - 1) / global.maxthrpertgroup &&
-           grp_max >= (thr_min +  global.maxthrpertgroup - 1) / global.maxthrpertgroup)
-               grp_min = (thr_min +  global.maxthrpertgroup - 1) / global.maxthrpertgroup;
+       if (grp_min < (thr_min +  global.maxthrpertgroup - 1) / global.maxthrpertgroup) {
+               if (grp_max >= (thr_min +  global.maxthrpertgroup - 1) / global.maxthrpertgroup)
+                       grp_min = (thr_min +  global.maxthrpertgroup - 1) / global.maxthrpertgroup;
+               else
+                       grp_min = grp_max;
+       }
 
        if (grp_max > thr_max && grp_min <= thr_max)
                grp_max = thr_max;