From c7e9706e0f3faff16a63c2fd9e6f7b0ef9914262 Mon Sep 17 00:00:00 2001 From: Willy Tarreau Date: Tue, 3 May 2022 15:42:07 +0200 Subject: [PATCH] CLEANUP: map/cli: always detach the backref from the list after "show map" There's no point checking the state before deciding to detach the backref on "show map", it should always be done if the list is not empty. Note that being empty guarantees that it's not linked into the list, and conversely not being empty guarantees that it's in the list, hence the test doesn't need to be performed under the lock. --- src/map.c | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/src/map.c b/src/map.c index fea9a1d..dea9bcd 100644 --- a/src/map.c +++ b/src/map.c @@ -352,12 +352,9 @@ static int cli_io_handler_pat_list(struct appctx *appctx) /* If we're forced to shut down, we might have to remove our * reference to the last ref_elt being dumped. */ - if (ctx->state == STATE_LIST) { + if (!LIST_ISEMPTY(&ctx->bref.users)) { HA_SPIN_LOCK(PATREF_LOCK, &ctx->ref->lock); - if (!LIST_ISEMPTY(&ctx->bref.users)) { - LIST_DELETE(&ctx->bref.users); - LIST_INIT(&ctx->bref.users); - } + LIST_DEL_INIT(&ctx->bref.users); HA_SPIN_UNLOCK(PATREF_LOCK, &ctx->ref->lock); } return 1; @@ -687,10 +684,9 @@ static void cli_release_show_map(struct appctx *appctx) { struct show_map_ctx *ctx = appctx->svcctx; - if (ctx->state == STATE_LIST) { + if (!LIST_ISEMPTY(&ctx->bref.users)) { HA_SPIN_LOCK(PATREF_LOCK, &ctx->ref->lock); - if (!LIST_ISEMPTY(&ctx->bref.users)) - LIST_DELETE(&ctx->bref.users); + LIST_DEL_INIT(&ctx->bref.users); HA_SPIN_UNLOCK(PATREF_LOCK, &ctx->ref->lock); } } -- 1.7.10.4