BUG/MEDIUM: cli: prevent memory leak on write errors

Since the introduction of payload support on the CLI in 1.9-dev1 by
commit abbf60710 ("MEDIUM: cli: Add payload support"), a chunk is
temporarily allocated for the CLI to support defragmenting a payload
passed with a command. However it's only released when passing via
the CLI_ST_END state (i.e. on clean shutdown), but not on errors.
Something as trivial as:

  $ while :; do ncat --send-only -U /path/to/cli <<< "show stat"; done

with a few hundreds of servers is enough see the number of allocated
trash chunks go through the roof in "show pools".

This needs to be backported as far as 2.0.
This commit is contained in:
Willy Tarreau 2021-05-04 16:27:45 +02:00
parent c31b200872
commit 18b2a9dd87

View File

@ -832,6 +832,7 @@ static void cli_io_handler(struct appctx *appctx)
*/
si_shutw(si);
free_trash_chunk(appctx->chunk);
appctx->chunk = NULL;
break;
}
else if (appctx->st0 == CLI_ST_GETREQ) {
@ -1078,6 +1079,9 @@ static void cli_io_handler(struct appctx *appctx)
*/
static void cli_release_handler(struct appctx *appctx)
{
free_trash_chunk(appctx->chunk);
appctx->chunk = NULL;
if (appctx->io_release) {
appctx->io_release(appctx);
appctx->io_release = NULL;