]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
BUG/MEDIUM: mux-h1: Disable splicing for the conn-stream if read0 is received
authorChristopher Faulet <cfaulet@haproxy.com>
Tue, 7 Jul 2020 08:56:40 +0000 (10:56 +0200)
committerChristopher Faulet <cfaulet@haproxy.com>
Tue, 7 Jul 2020 12:29:18 +0000 (14:29 +0200)
The CS_FL_MAY_SPLICE flag must be unset for the conn-stream if a read0 is
received while reading on the kernel pipe. It is mandatory when some data was
also received. Otherwise, this flag prevent the call to the h1 rcv_buf()
callback. Thus the read0 will never be handled by the h1 multiplexer leading to
a freeze of the session until a timeout is reached.

This patch must be backported to 2.1 and 2.0.

src/mux_h1.c

index 97f0a22be53422e751e18ec76d9cee6d8ef1e469..8f3222ddf327424bd9fb2ca26ff0afbbe5106511 100644 (file)
@@ -2805,7 +2805,8 @@ static int h1_rcv_pipe(struct conn_stream *cs, struct pipe *pipe, unsigned int c
                TRACE_STATE("read0 on connection", H1_EV_STRM_RECV, cs->conn, h1s);
        }
 
-       if ((h1m->state != H1_MSG_TUNNEL && h1m->state != H1_MSG_DATA) ||
+       if ((h1s->flags & H1S_F_REOS) ||
+           (h1m->state != H1_MSG_TUNNEL && h1m->state != H1_MSG_DATA) ||
            (h1m->state == H1_MSG_DATA && !h1m->curr_len))
                cs->flags &= ~CS_FL_MAY_SPLICE;