From d01ce4003d31c14d1eaed50f6c0bd9a83c6296a2 Mon Sep 17 00:00:00 2001 From: Christopher Faulet Date: Wed, 2 Jan 2019 17:44:13 +0100 Subject: [PATCH] BUG/MEDIUM: proto-htx: Set SI_FL_NOHALF on server side when request is done In the function htx_end_request, the flag SI_FL_NOHALF must be set on the server side once the request is in the state HTTP_MSG_DONE. But the response state was checked before and the flag was only set when the response was also in the state HTTP_MSG_DONE. Of course, it is not desirable. This patch must be backported to 1.9. --- src/proto_htx.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/proto_htx.c b/src/proto_htx.c index 2a021938e..9a22a5ed2 100644 --- a/src/proto_htx.c +++ b/src/proto_htx.c @@ -5068,13 +5068,6 @@ static void htx_end_request(struct stream *s) return; if (txn->req.msg_state == HTTP_MSG_DONE) { - if (txn->rsp.msg_state < HTTP_MSG_DONE) { - /* The server has not finished to respond, so we - * don't want to move in order not to upset it. - */ - return; - } - /* No need to read anymore, the request was completely parsed. * We can shut the read side unless we want to abort_on_close, * or we have a POST request. The issue with POST requests is @@ -5099,6 +5092,13 @@ static void htx_end_request(struct stream *s) */ chn->flags |= CF_NEVER_WAIT; + if (txn->rsp.msg_state < HTTP_MSG_DONE) { + /* The server has not finished to respond, so we + * don't want to move in order not to upset it. + */ + return; + } + /* When we get here, it means that both the request and the * response have finished receiving. Depending on the connection * mode, we'll have to wait for the last bytes to leave in either