BUG/MEDIUM: mux-h1: Disable splicing for the conn-stream if read0 is received
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>
(cherry picked from commit 94137ac26398e168933e92d60f118aba866c8899)
Signed-off-by: Christopher Faulet <cfaulet@haproxy.com>
diff --git a/src/mux_h1.c b/src/mux_h1.c
index 670d26e..583fad6 100644
--- a/src/mux_h1.c
+++ b/src/mux_h1.c
@@ -2562,7 +2562,8 @@
h1s->flags &= ~(H1S_F_BUF_FLUSH|H1S_F_SPLICED_DATA);
}
- 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;