]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
BUG/MEDIUM: proto-htx: Set SI_FL_NOHALF on server side when request is done
authorChristopher Faulet <cfaulet@haproxy.com>
Wed, 2 Jan 2019 16:44:13 +0000 (17:44 +0100)
committerWilly Tarreau <w@1wt.eu>
Thu, 3 Jan 2019 17:45:00 +0000 (18:45 +0100)
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

index 2a021938e4edaee13f7c1d382fc931b01d2f09f3..9a22a5ed250ec600276c41edb5ca26281be91f5b 100644 (file)
@@ -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