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.
This commit is contained in:
Christopher Faulet 2023-11-27 17:56:30 +01:00
parent fe3726cb76
commit 2a307d273a

View File

@ -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));
}