mirror of
http://git.haproxy.org/git/haproxy.git/
synced 2025-05-16 14:48:03 +00: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
17
src/cli.c
17
src/cli.c
@ -577,10 +577,19 @@ static int cli_parse_request(struct appctx *appctx)
|
||||
|
||||
appctx->io_handler = kw->io_handler;
|
||||
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) {
|
||||
appctx->st0 = CLI_ST_CALLBACK;
|
||||
}
|
||||
|
||||
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;
|
||||
return 1;
|
||||
fail:
|
||||
appctx->io_handler = NULL;
|
||||
appctx->io_release = NULL;
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user