From 2a307d273acaf382fb035605e76fd9a50b6e74db Mon Sep 17 00:00:00 2001 From: Christopher Faulet Date: Mon, 27 Nov 2023 17:56:30 +0100 Subject: [PATCH] BUG/MEDIUM: stconn: Don't perform zero-copy FF if opposite SC is blocked When zero-copy data fast-forwarding is inuse, if the opposite SC is blocked, there is no reason to try to fast-forward more data. Worst, in some cases, this can lead to a receive loop of the producer side while the consumer side is blocked. No backport needed. --- include/haproxy/sc_strm.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/include/haproxy/sc_strm.h b/include/haproxy/sc_strm.h index c54b6162cb..722662eaa4 100644 --- a/include/haproxy/sc_strm.h +++ b/include/haproxy/sc_strm.h @@ -281,6 +281,9 @@ static inline int sc_is_recv_allowed(const struct stconn *sc) if (sc_ep_test(sc, SE_FL_HAVE_NO_DATA)) return 0; + if (sc_ep_test(sc, SE_FL_MAY_FASTFWD) && (sc_opposite(sc)->sedesc->iobuf.flags & IOBUF_FL_FF_BLOCKED)) + return 0; + return !(sc->flags & (SC_FL_WONT_READ|SC_FL_NEED_BUFF|SC_FL_NEED_ROOM)); } -- 2.47.3