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.
diff --git a/src/cli.c b/src/cli.c
index 162daa6..b60a030 100644
--- a/src/cli.c
+++ b/src/cli.c
@@ -832,6 +832,7 @@
*/
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_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;