]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
BUG/MINOR: mux-quic: handle properly Tx buf exhaustion
authorAmaury Denoyelle <adenoyelle@haproxy.com>
Mon, 15 May 2023 11:56:46 +0000 (13:56 +0200)
committerAmaury Denoyelle <adenoyelle@haproxy.com>
Mon, 15 May 2023 12:06:21 +0000 (14:06 +0200)
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.

src/mux_quic.c

index 1ac9956790bc01592656dc92f71622f7ca8b405e..5fd8c74781fd051a56ebc249c1de049a84429a85 100644 (file)
@@ -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;
                        }