From: Christopher Faulet Date: Wed, 17 Oct 2018 09:08:23 +0000 (+0200) Subject: MINOR: conn_stream: Add a flag to notify the mux it must respect the reserve X-Git-Tag: v1.9-dev7~79 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=72d9125efb70f84cb3fdc3d67555a7878dbf84fb;p=thirdparty%2Fhaproxy.git MINOR: conn_stream: Add a flag to notify the mux it must respect the reserve By setting the flag CO_RFL_KEEP_RSV when calling mux->rcv_buf, the stream-interface notifies the mux it must keep some space to preserve the buffer's reserve. This flag is only useful for multiplexers handling structured data, because in such case, the stream-interface cannot know the real amount of free space in the channel's buffer. --- diff --git a/include/types/connection.h b/include/types/connection.h index 5af651ff51..72562194dc 100644 --- a/include/types/connection.h +++ b/include/types/connection.h @@ -259,6 +259,7 @@ enum { enum { CO_RFL_BUF_WET = 0x0001, /* Buffer still has some output data present */ CO_RFL_BUF_FLUSH = 0x0002, /* Flush mux's buffers but don't read more data */ + CO_RFL_KEEP_RSV = 0x0004, /* Don't fill the reserved space */ }; /* flags that can be passed to xprt->snd_buf() and mux->snd_buf() */ diff --git a/src/stream_interface.c b/src/stream_interface.c index 8742a400f6..3c7284f6c9 100644 --- a/src/stream_interface.c +++ b/src/stream_interface.c @@ -1210,7 +1210,10 @@ int si_cs_recv(struct conn_stream *cs) * CS_FL_RCV_MORE on the CS if more space is needed. */ max = channel_recv_max(ic); - ret = cs->conn->mux->rcv_buf(cs, &ic->buf, max, flags | (co_data(ic) ? CO_RFL_BUF_WET : 0)); + ret = cs->conn->mux->rcv_buf(cs, &ic->buf, max, + flags | + (co_data(ic) ? CO_RFL_BUF_WET : 0) | + ((channel_recv_limit(ic) < b_size(&ic->buf)) ? CO_RFL_KEEP_RSV : 0)); if (cs->flags & CS_FL_RCV_MORE) si_rx_room_blk(si);