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.
(cherry picked from commit
a131a8fe934b40324fd8a16d237616331ea0088f)
Signed-off-by: Christopher Faulet <cfaulet@haproxy.com>
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;