From: Christopher Faulet Date: Mon, 27 Nov 2023 16:56:30 +0000 (+0100) Subject: BUG/MEDIUM: stconn: Don't perform zero-copy FF if opposite SC is blocked X-Git-Tag: v2.9-dev12~74 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=2a307d273acaf382fb035605e76fd9a50b6e74db;p=thirdparty%2Fhaproxy.git 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. --- 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)); }