From: Willy Tarreau Date: Thu, 8 Feb 2024 19:53:31 +0000 (+0100) Subject: MINOR: cli: always reset the applet task's timeout X-Git-Tag: v3.0-dev3~11 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=02b31fa0030549938bd3cda0125a8d59ed3a8254;p=thirdparty%2Fhaproxy.git MINOR: cli: always reset the applet task's timeout The CLI applet doesn't make use of its timeout at all, only the stream does. That's a wonder because it allows any command's I/O handler to trivially set a wakeup timer by simply touching the task's ->expire field, and the I/O handler will automatically be woken up again. The only condition for this is that we properly take care of clearing that timeout whenever we finish processing a command and switch back to the PROMPT state. That's what this patch does. --- diff --git a/src/cli.c b/src/cli.c index cbfec88dfe..1546c0d7cd 100644 --- a/src/cli.c +++ b/src/cli.c @@ -1027,6 +1027,7 @@ static void cli_io_handler(struct appctx *appctx) appctx->chunk->data++; } + appctx->t->expire = TICK_ETERNITY; appctx->st0 = CLI_ST_PROMPT; if (appctx->st1 & APPCTX_CLI_ST1_PAYLOAD) { @@ -1139,6 +1140,7 @@ static void cli_io_handler(struct appctx *appctx) appctx->st0 == CLI_ST_PRINT_UMSGERR) { usermsgs_clr(NULL); } + appctx->t->expire = TICK_ETERNITY; appctx->st0 = CLI_ST_PROMPT; } break; @@ -1146,6 +1148,7 @@ static void cli_io_handler(struct appctx *appctx) case CLI_ST_CALLBACK: /* use custom pointer */ if (appctx->io_handler) if (appctx->io_handler(appctx)) { + appctx->t->expire = TICK_ETERNITY; appctx->st0 = CLI_ST_PROMPT; if (appctx->io_release) { appctx->io_release(appctx);