]> git.kaiwu.me - haproxy.git/commitdiff
BUG/MINOR: mux_quic: wake streams on soft-stop using listener socket
authorAmaury Denoyelle <adenoyelle@haproxy.com>
Tue, 20 Oct 2026 09:12:00 +0000 (11:12 +0200)
committerAmaury Denoyelle <adenoyelle@haproxy.com>
Tue, 20 Oct 2026 12:27:35 +0000 (14:27 +0200)
Since the following patch, streams wakeup mechanism has changed so that
every still present stream are notified regardless of the connection
status. This is useful when qcm_wake() callback is used. Along with this
change, qcc_wake_streams() via qcm_wake() is no longer directly called
if the connection is on error, as previous qcc_io_process() already
perform it.

  044ad3a602d7b217ec1470f06ec15bca102ff685
  BUG/MEDIUM: mux-quic: adjust wakeup behavior

This causes issue when qcm_wake() is used to notify about proxy
soft-stop. If listener socket is used, soft-stop is not really
supported, so connection is flagged with CO_FL_ERROR and
qcc_io_process() is interrupted. This skips stream notification, so they
will remain until their timeout fire, which may block worker termination
for some delay.

Fix this by ensuring qcc_wake_streams() is always called if connection
on error in qcc_io_process() epilogue.

This must be backported up to 2.8.

src/mux_quic.c

index 69315cba34f4b4f19aeed68d3d5643aa58d62c53..c8c6655e010c88afc2733880a38ad7c287b78568 100644 (file)
@@ -3599,11 +3599,11 @@ static int qcc_io_process(struct qcc *qcc)
                        qcc_app_shutdown(qcc);
        }
 
+ out:
        /* Report error if set on stream endpoint layer. */
        if (qcc->flags & (QC_CF_ERR_CONN|QC_CF_ERRL))
                qcc_wake_streams(qcc);
 
- out:
        if (qcc_is_dead(qcc))
                return 1;