From e8cefacfa9dc8c7893d773acb4769de73f8323d2 Mon Sep 17 00:00:00 2001 From: Christopher Faulet Date: Mon, 7 Mar 2022 18:20:21 +0100 Subject: [PATCH] BUG/MEDIUM: mcli: Properly handle errors and timeouts during reponse processing The response analyzer of the master CLI only handles read errors. So if there is a write error, the session remains stuck because some outgoing data are blocked in the channel and the response analyzer waits everything to be sent. Because the maxconn is set to 10 for the master CLI, it may be unresponsive if this happens to many times. Now read and write errors, timeouts and client aborts are handled. This patch should solve the issue #1512. It must be backported as far as 2.0. --- src/cli.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/cli.c b/src/cli.c index 63ca4c6d0..6f617b2fd 100644 --- a/src/cli.c +++ b/src/cli.c @@ -2615,7 +2615,8 @@ int pcli_wait_for_response(struct stream *s, struct channel *rep, int an_bit) struct proxy *fe = strm_fe(s); struct proxy *be = s->be; - if (rep->flags & CF_READ_ERROR) { + if ((rep->flags & (CF_READ_ERROR|CF_READ_TIMEOUT|CF_WRITE_ERROR|CF_WRITE_TIMEOUT)) || + ((rep->flags & CF_SHUTW) && (rep->to_forward || co_data(rep)))) { pcli_reply_and_close(s, "Can't connect to the target CLI!\n"); s->req.analysers &= ~AN_REQ_WAIT_CLI; s->res.analysers &= ~AN_RES_WAIT_CLI;