mirror of
https://git.haproxy.org/git/haproxy.git/
synced 2025-08-07 23:56:57 +02:00
BUG/MINOR: cli: don't call the kw->io_release if kw->parse failed
The io_release() callback of the cli_kw is supposed to be used to clean what an io_handler() has made. It is called once the work in the IO handler is finished, or when the connection was aborted by the client. This patch fixes a bug where the io_release callback was called even when the parse() callback failed. Which means that the io_release() could called even if the io_handler() was not called. Should be backported in every versions that have a cli_kw->release(). (as far as 1.7)
This commit is contained in:
parent
c70df53250
commit
90b098c921
15
src/cli.c
15
src/cli.c
@ -577,10 +577,19 @@ static int cli_parse_request(struct appctx *appctx)
|
|||||||
|
|
||||||
appctx->io_handler = kw->io_handler;
|
appctx->io_handler = kw->io_handler;
|
||||||
appctx->io_release = kw->io_release;
|
appctx->io_release = kw->io_release;
|
||||||
/* kw->parse could set its own io_handler or ip_release handler */
|
|
||||||
if ((!kw->parse || kw->parse(args, payload, appctx, kw->private) == 0) && appctx->io_handler) {
|
if (kw->parse && kw->parse(args, payload, appctx, kw->private) != 0)
|
||||||
|
goto fail;
|
||||||
|
|
||||||
|
/* kw->parse could set its own io_handler or io_release handler */
|
||||||
|
if (!appctx->io_handler)
|
||||||
|
goto fail;
|
||||||
|
|
||||||
appctx->st0 = CLI_ST_CALLBACK;
|
appctx->st0 = CLI_ST_CALLBACK;
|
||||||
}
|
return 1;
|
||||||
|
fail:
|
||||||
|
appctx->io_handler = NULL;
|
||||||
|
appctx->io_release = NULL;
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user