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.
This commit is contained in:
Willy Tarreau 2022-05-03 15:42:07 +02:00
parent a0d6280af4
commit c7e9706e0f

View file

@ -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);
}
}