From 5534334f1f4c0fa879415a116e707ed80bf74169 Mon Sep 17 00:00:00 2001 From: Christopher Faulet Date: Fri, 18 Nov 2022 15:52:58 +0100 Subject: [PATCH] MEDIUM: thread: Restric nbthread/thread-group(s) to very first global sections nbhread, thead-group and thread-groups directives must only be defined in very first global sections. It means no other section must have been parsed before. Indeed, some parts of the configuratio depends on the value of these settings and it is undefined to change them after. --- src/thread.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/thread.c b/src/thread.c index 64ac476a3..59bfbf89c 100644 --- a/src/thread.c +++ b/src/thread.c @@ -1312,6 +1312,11 @@ static int cfg_parse_nbthread(char **args, int section_type, struct proxy *curpx if (too_many_args(1, args, err, NULL)) return -1; + if (non_global_section_parsed == 1) { + memprintf(err, "'%s' not allowed if a non-global section was previously defined. This parameter must be declared in the first global section", args[0]); + return -1; + } + nbthread = strtol(args[1], &errptr, 10); if (!*args[1] || *errptr) { memprintf(err, "'%s' passed a missing or unparsable integer value in '%s'", args[0], args[1]); @@ -1349,6 +1354,11 @@ static int cfg_parse_thread_group(char **args, int section_type, struct proxy *c long tnum, tend, tgroup; int arg, tot; + if (non_global_section_parsed == 1) { + memprintf(err, "'%s' not allowed if a non-global section was previously defined. This parameter must be declared in the first global section", args[0]); + return -1; + } + tgroup = strtol(args[1], &errptr, 10); if (!*args[1] || *errptr) { memprintf(err, "'%s' passed a missing or unparsable integer value in '%s'", args[0], args[1]); @@ -1446,6 +1456,11 @@ static int cfg_parse_thread_groups(char **args, int section_type, struct proxy * if (too_many_args(1, args, err, NULL)) return -1; + if (non_global_section_parsed == 1) { + memprintf(err, "'%s' not allowed if a non-global section was previously defined. This parameter must be declared in the first global section", args[0]); + return -1; + } + nbtgroups = strtol(args[1], &errptr, 10); if (!*args[1] || *errptr) { memprintf(err, "'%s' passed a missing or unparsable integer value in '%s'", args[0], args[1]);