From c8ea4e851e1fa719e6e37863a7f84d8cc83f7c94 Mon Sep 17 00:00:00 2001 From: Willy Tarreau Date: Mon, 16 Dec 2024 09:31:27 +0100 Subject: [PATCH] BUILD: debug: only dump/reset glitch counters when really defined If neither DEBUG_GLITCHES nor DEBUG_STRICT is set, we end up with no dbg_cnt section, resulting in debug_parse_cli_counters not building due to __stop_dbg_cnt and __start_dbg_cnt not being defined. Let's just condition the end of the function to these conditions. An alternate approach (less elegant) is to always declare a dummy entry of type DBG_COUNTER_TYPES in debug.c. This must be backported to 3.1 since it was brought with glitches. (cherry picked from commit 4710ab5604298eefddb36887098d5fc388dcd3cb) Signed-off-by: Christopher Faulet --- src/debug.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/debug.c b/src/debug.c index d052f5b..cb33cf0 100644 --- a/src/debug.c +++ b/src/debug.c @@ -2261,13 +2261,17 @@ static int debug_parse_cli_counters(char **args, char *payload, struct appctx *a return cli_err(appctx, "Expects an optional action ('reset','show'), optional types ('bug','chk','cnt','glt') and optionally 'all' to even dump null counters.\n"); } +#if DEBUG_STRICT > 0 || defined(DEBUG_GLITCHES) + ctx->start = &__start_dbg_cnt; + ctx->stop = &__stop_dbg_cnt; +#endif if (action == 1) { // reset struct debug_count *ptr; if (!cli_has_level(appctx, ACCESS_LVL_ADMIN)) return 1; - for (ptr = &__start_dbg_cnt; ptr < &__stop_dbg_cnt; ptr++) { + for (ptr = ctx->start; ptr < ctx->stop; ptr++) { if (ctx->types && !(ctx->types & (1 << ptr->type))) continue; _HA_ATOMIC_STORE(&ptr->count, 0); @@ -2276,8 +2280,6 @@ static int debug_parse_cli_counters(char **args, char *payload, struct appctx *a } /* OK it's a show, let's dump relevant counters */ - ctx->start = &__start_dbg_cnt; - ctx->stop = &__stop_dbg_cnt; return 0; } -- 1.7.10.4