From c2fba3f77f1f0212f5d5c206add169bd2fd2494e Mon Sep 17 00:00:00 2001 From: Christopher Faulet Date: Wed, 1 Mar 2023 16:03:17 +0100 Subject: [PATCH] BUG/MEDIUM: http-ana: Don't close request side when waiting for response A recent fix (af124360e "BUG/MEDIUM: http-ana: Detect closed SC on opposite side during body forwarding") was pushed to handle to sync a side when the opposite one is in closing state. However, sometimes, the synchro is performed too early, preventing a L7 retry to be performed. Indeed, while the above fix is valid on the reponse side. On the request side, if the response was not yet received, we must wait before closing. So, to fix the fix, on the request side, we at least wait the response was received before finishing the request analysis. Of course, if there is an error, an abort or anything wrong on the server side, the response analyser should handle it. This patch is related to #2061. No backport needed. --- src/http_ana.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/http_ana.c b/src/http_ana.c index f0c085980..bd2be1b5b 100644 --- a/src/http_ana.c +++ b/src/http_ana.c @@ -4235,7 +4235,8 @@ static void http_end_request(struct stream *s) */ chn->flags |= CF_NEVER_WAIT; - if (txn->rsp.msg_state < HTTP_MSG_DONE && s->scb->state != SC_ST_CLO) { + if (txn->rsp.msg_state < HTTP_MSG_BODY || + (txn->rsp.msg_state < HTTP_MSG_DONE && s->scb->state != SC_ST_CLO)) { /* The server has not finished to respond and the * backend SC is not closed, so we don't want to move in * order not to upset it.