]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
BUG/MINOR: mux_quic: open an idle QCS on reset on BE side
authorAmaury Denoyelle <adenoyelle@haproxy.com>
Thu, 23 Apr 2026 12:23:01 +0000 (14:23 +0200)
committerAmaury Denoyelle <adenoyelle@haproxy.com>
Thu, 28 May 2026 15:36:05 +0000 (17:36 +0200)
On the backend side, a QCS may be opened but resetted immediately. No
STREAM frame will be emitted prior to the RESET_STREAM. When the latter
is sent, qcs_close_local() will mark the QCS Tx channel as closed.

In this case, a BUG_ON() would be triggered as there is QCS Tx channel
is not yet marked as opened. To prevent this, add a qcs_idle_open() call
when the stream is resetted, but only for the backend side.

This should be backported up to 3.3.

src/mux_quic.c

index b36799a6bcf9881a8e22443441fa3a1bf5f39361..2edc88b78aeb454a88cecc7b8a95af20910f5767 100644 (file)
@@ -1737,6 +1737,10 @@ void qcc_reset_stream(struct qcs *qcs, int err, int tevt)
        qcs->flags |= QC_SF_TO_RESET;
        qcs->err = err;
 
+       /* On BE side, a QCS may be resetted before any data emission. */
+       if (conn_is_back(qcs->qcc->conn))
+               qcs_idle_open(qcs);
+
        if (diff) {
                const int soft_blocked = qfctl_sblocked(&qcc->tx.fc);