]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
BUG/MINOR: http: Don't reset the transaction if there are still data to send
authorChristopher Faulet <cfaulet@haproxy.com>
Thu, 6 Jul 2017 13:51:35 +0000 (15:51 +0200)
committerWilly Tarreau <w@1wt.eu>
Thu, 6 Jul 2017 21:06:57 +0000 (23:06 +0200)
To reset an HTTP transaction, we need to be sure all data were sent, for the
request and the response. There are tests on request and response buffers for
that in http_resync_states function. But the return code was wrong. We must
return 0 to wait.

This patch must be backported in 1.7

src/proto_http.c

index 7141833b0d4982a27f2f9e40ee0d07a6dc3d3852..e0ed2dab67421fecf2e9d0462fe03760975e8e39 100644 (file)
@@ -5654,16 +5654,18 @@ int http_resync_states(struct stream *s)
                 * and the response buffer must realigned
                 * (realign is done is http_end_txn_clean_session).
                 */
-               if (s->req.buf->o)
+               if (s->req.buf->o) {
                        s->req.flags |= CF_WAKE_WRITE;
-               else if (s->res.buf->o)
+                       return 0;
+               }
+               else if (s->res.buf->o) {
                        s->res.flags |= CF_WAKE_WRITE;
-               else {
-                       s->req.analysers = AN_REQ_FLT_END;
-                       s->res.analysers = AN_RES_FLT_END;
-                       txn->flags |= TX_WAIT_CLEANUP;
-                       return 1;
+                       return 0;
                }
+               s->req.analysers = AN_REQ_FLT_END;
+               s->res.analysers = AN_RES_FLT_END;
+               txn->flags |= TX_WAIT_CLEANUP;
+               return 1;
        }
 
        return txn->req.msg_state != old_req_state ||