From: Christopher Faulet Date: Fri, 5 May 2023 09:40:30 +0000 (+0200) Subject: MEDIUM: stconn: Check room needed to unblock opposite SC when data was sent X-Git-Tag: v2.8-dev10~35 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e7405d412484806aab0300bbf5b7bebf33263942;p=thirdparty%2Fhaproxy.git MEDIUM: stconn: Check room needed to unblock opposite SC when data was sent After a sending attempt, we check the opposite SC to see if it is waiting for a minimum free space to receive more data. If the condition is respected, it is unblocked. 0 is special case where the SC is unconditionally unblocked. --- diff --git a/src/stconn.c b/src/stconn.c index 4290961d1f..39dcbb5f0c 100644 --- a/src/stconn.c +++ b/src/stconn.c @@ -1664,9 +1664,11 @@ static int sc_conn_send(struct stconn *sc) oc->flags |= CF_WRITE_EVENT | CF_WROTE_DATA; if (sc->state == SC_ST_CON) sc->state = SC_ST_RDY; - sc_have_room(sc_opposite(sc)); } + if (!sco->room_needed || (did_send && (sco->room_needed < 0 || channel_recv_max(sc_oc(sc)) >= sco->room_needed))) + sc_have_room(sco); + if (sc_ep_test(sc, SE_FL_ERROR | SE_FL_ERR_PENDING)) { oc->flags |= CF_WRITE_EVENT; BUG_ON(sc_ep_test(sc, SE_FL_EOS|SE_FL_ERROR|SE_FL_ERR_PENDING) == (SE_FL_EOS|SE_FL_ERR_PENDING));