]> git.kaiwu.me - haproxy.git/commitdiff
MINOR: mux_quic: adjust shut stream callback
authorAmaury Denoyelle <adenoyelle@haproxy.com>
Tue, 30 Jun 2026 16:29:50 +0000 (18:29 +0200)
committerAmaury Denoyelle <adenoyelle@haproxy.com>
Mon, 6 Jul 2026 08:19:12 +0000 (10:19 +0200)
Clean up MUX QUIC stream shut callback with a central invokation for
lclose app_ops. Also, traces are added at H3 layer to log the method of
closure.

src/h3.c
src/mux_quic.c

index 3a1eb1124299a1c52fb447c327d8ed4c9d8a3eaa..32d8f33dac5064fe2d5db03993fde1180ba66278 100644 (file)
--- a/src/h3.c
+++ b/src/h3.c
@@ -3289,19 +3289,23 @@ static void h3_lclose(struct qcs *qcs, enum qcc_app_ops_lclose_mode mode)
                 * the connection with H3_FRAME_UNEXPECTED.
                 */
                if (qcs->tx.fc.off_soft) {
+                       TRACE_STATE("close stream with empty fin", H3_EV_H3S_END, qcs->qcc->conn, qcs);
                        qcs->flags |= QC_SF_FIN_STREAM;
                        qcc_send_stream(qcs, 0, 0);
                }
                else {
-                       qcc_reset_stream(qcs, 0, se_tevt_type_shutw);
+                       TRACE_STATE("reset stream as no content emitted yet", H3_EV_H3S_END, qcs->qcc->conn, qcs);
+                       qcc_reset_stream(qcs, H3_ERR_REQUEST_CANCELLED, se_tevt_type_shutw);
                }
                break;
 
        case QCC_APP_OPS_LCLO_MODE_ABORT:
+               TRACE_STATE("cancel stream", H3_EV_H3S_END, qcs->qcc->conn, qcs);
                qcc_reset_stream(qcs, H3_ERR_REQUEST_CANCELLED, se_tevt_type_cancelled);
                break;
 
        case QCC_APP_OPS_LCLO_MODE_KILL_CONN:
+               TRACE_STATE("kill stream", H3_EV_H3S_END, qcs->qcc->conn, qcs);
                qcc_reset_stream(qcs, H3_ERR_EXCESSIVE_LOAD, se_tevt_type_cancelled);
                if (!(qcs->qcc->flags & (QC_CF_ERR_CONN|QC_CF_ERRL))) {
                        qcc_set_error(qcs->qcc, H3_ERR_EXCESSIVE_LOAD, 1,
index ae6c2da0d62e9be168caaa440d01cf43cb11d6a0..6960c599443e1f426502e518934df83dc5e4ae47 100644 (file)
@@ -4704,6 +4704,7 @@ static void qcm_strm_shut(struct stconn *sc, unsigned int mode, struct se_abort_
 {
        struct qcs *qcs = __sc_mux_strm(sc);
        struct qcc *qcc = qcs->qcc;
+       enum qcc_app_ops_lclose_mode lclo_mode;
 
        if (!(mode & (SE_SHW_SILENT|SE_SHW_NORMAL)))
                return;
@@ -4713,12 +4714,15 @@ static void qcm_strm_shut(struct stconn *sc, unsigned int mode, struct se_abort_
        /* Early closure reported if QC_SF_FIN_STREAM not yet set. */
        if (!qcs_is_close_local(qcs) &&
            !(qcs->flags & (QC_SF_FIN_STREAM|QC_SF_TO_RESET))) {
+
                if (qcs->flags & QC_SF_UNKNOWN_PL_LENGTH)
-                       qcc->app_ops->lclose(qcs, QCC_APP_OPS_LCLO_MODE_NORMAL);
+                       lclo_mode = QCC_APP_OPS_LCLO_MODE_NORMAL;
                else if (se_fl_test(qcs->sd, SE_FL_KILL_CONN))
-                       qcc->app_ops->lclose(qcs, QCC_APP_OPS_LCLO_MODE_KILL_CONN);
+                       lclo_mode = QCC_APP_OPS_LCLO_MODE_KILL_CONN;
                else
-                       qcc->app_ops->lclose(qcs, QCC_APP_OPS_LCLO_MODE_ABORT);
+                       lclo_mode = QCC_APP_OPS_LCLO_MODE_ABORT;
+
+               qcc->app_ops->lclose(qcs, lclo_mode);
                tasklet_wakeup(qcc->wait_event.tasklet);
        }