From: Willy Tarreau Date: Fri, 18 Nov 2016 18:17:40 +0000 (+0100) Subject: BUG/MINOR: cli: properly decrement ref count on tables during failed dumps X-Git-Tag: v1.7.0~79 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=2fe1b921639fd152092cead0fe0398ef0b15c5a3;p=thirdparty%2Fhaproxy.git BUG/MINOR: cli: properly decrement ref count on tables during failed dumps 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. --- diff --git a/src/dumpstats.c b/src/dumpstats.c index 4c3f830273..e9ae9e885a 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;