BUG/MINOR: cli: properly decrement ref count on tables during failed dumps

Gernot Prner 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.
This commit is contained in:
Willy Tarreau 2016-11-18 19:17:40 +01:00
parent 5179146fa3
commit 2fe1b92163

View File

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