summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAmaury Denoyelle <adenoyelle@haproxy.com>2023-05-15 13:56:46 +0200
committerAmaury Denoyelle <adenoyelle@haproxy.com>2023-05-15 14:06:21 +0200
commit1611a7659b25a9bdc226790b4acb185eb3de2414 (patch)
tree98a7d2cbffa8cbeb146bc1ac8159e2525c4352f5
parent6e0c39d7ac3282bc255f742da36402434af0db77 (diff)
downloadhaproxy-1611a7659b25a9bdc226790b4acb185eb3de2414.tar.gz
BUG/MINOR: mux-quic: handle properly Tx buf exhaustion
Since the following patch commit 6c501ed23bea953518059117e7dd19e8d6cb6bd8 BUG/MINOR: mux-quic: differentiate failure on qc_stream_desc alloc it is not possible to check if Tx buf allocation failed due to a configured limit exhaustion or a simple memory failure. This patch fixes it as the condition was inverted. Indeed, if buf_avail is null, this means that the limit has been reached. On the contrary case, this is a real memory alloc failure. This caused the flag QC_CF_CONN_FULL to not be properly used and may have caused disruption on transfer with several streams or large data. This was detected due to an abnormal error QUIC MUX traces. Also change in consequence trace for limit exhaustion to be more explicit. This must be backported up to 2.6.
-rw-r--r--src/mux_quic.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/src/mux_quic.c b/src/mux_quic.c
index 1ac995679..5fd8c7478 100644
--- a/src/mux_quic.c
+++ b/src/mux_quic.c
@@ -1844,12 +1844,12 @@ static int _qc_send_qcs(struct qcs *qcs, struct list *frms)
out = qc_stream_buf_alloc(qcs->stream, qcs->tx.offset,
&buf_avail);
if (!out) {
- if (!buf_avail) {
+ if (buf_avail) {
TRACE_ERROR("stream desc alloc failure", QMUX_EV_QCS_SEND, qcc->conn, qcs);
goto err;
}
- TRACE_STATE("cannot allocate stream desc buffer", QMUX_EV_QCS_SEND, qcc->conn, qcs);
+ TRACE_STATE("hitting stream desc buffer limit", QMUX_EV_QCS_SEND, qcc->conn, qcs);
qcc->flags |= QC_CF_CONN_FULL;
goto out;
}