From 2fe1b921639fd152092cead0fe0398ef0b15c5a3 Mon Sep 17 00:00:00 2001 From: Willy Tarreau Date: Fri, 18 Nov 2016 19:17:40 +0100 Subject: [PATCH] BUG/MINOR: cli: properly decrement ref count on tables during failed dumps MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Gernot Pörner reported some constant leak of ref counts for stick tables entries. It happens that this leak was not at all in the regular traffic path but on the "show table" path. An extra ref count was taken during the dump if the output had to be paused, and it was released upon clean termination or an error detected in the I/O handler. But the release handler didn't do it, while it used to properly do it for the sessions dump. This fix needs to be backported to 1.6. --- src/dumpstats.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/dumpstats.c b/src/dumpstats.c index 4c3f83027..e9ae9e885 100644 --- a/src/dumpstats.c +++ b/src/dumpstats.c @@ -6770,6 +6770,11 @@ static void cli_release_handler(struct appctx *appctx) if (!LIST_ISEMPTY(&appctx->ctx.sess.bref.users)) LIST_DEL(&appctx->ctx.sess.bref.users); } + else if ((appctx->st0 == STAT_CLI_O_TAB || appctx->st0 == STAT_CLI_O_CLR) && + appctx->st2 == STAT_ST_LIST) { + appctx->ctx.table.entry->ref_cnt--; + stksess_kill_if_expired(&appctx->ctx.table.proxy->table, appctx->ctx.table.entry); + } else if (appctx->st0 == STAT_CLI_PRINT_FREE) { free(appctx->ctx.cli.err); appctx->ctx.cli.err = NULL;