From: Amaury Denoyelle Date: Mon, 18 Dec 2023 16:30:35 +0000 (+0100) Subject: MINOR: mux-quic: remove qcc_shutdown() from qcc_release() X-Git-Tag: v3.0-dev1~79 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=3c38bb7ee100db95e0c4beaf184b933ab04985a1;p=thirdparty%2Fhaproxy.git MINOR: mux-quic: remove qcc_shutdown() from qcc_release() Render qcc_release() more generic by removing qcc_shutdown(). This prevents systematic graceful shutdown/CONNECTION_CLOSE emission if only QCC resource deallocation is necessary. For now, qcc_shutdown() is used before every qcc_release() invocation. The only exception is on qmux_destroy stream layer callback. This commit will be useful to reuse qcc_release() in other contexts to simply deallocate a QCC instance. --- diff --git a/src/mux_quic.c b/src/mux_quic.c index 541c687159..f276d7776a 100644 --- a/src/mux_quic.c +++ b/src/mux_quic.c @@ -2387,9 +2387,7 @@ static int qcc_io_process(struct qcc *qcc) return 0; } -/* release function. This one should be called to free all resources allocated - * to the mux. - */ +/* Free all resources allocated for connection. */ static void qcc_release(struct qcc *qcc) { struct connection *conn = qcc->conn; @@ -2397,8 +2395,6 @@ static void qcc_release(struct qcc *qcc) TRACE_ENTER(QMUX_EV_QCC_END, conn); - qcc_shutdown(qcc); - if (qcc->task) { task_destroy(qcc->task); qcc->task = NULL; @@ -2471,6 +2467,7 @@ struct task *qcc_io_cb(struct task *t, void *ctx, unsigned int status) return NULL; release: + qcc_shutdown(qcc); qcc_release(qcc); TRACE_LEAVE(QMUX_EV_QCC_WAKE); return NULL; @@ -2513,6 +2510,7 @@ static struct task *qcc_timeout_task(struct task *t, void *ctx, unsigned int sta */ if (qcc_is_dead(qcc)) { TRACE_STATE("releasing dead connection", QMUX_EV_QCC_WAKE, qcc->conn); + qcc_shutdown(qcc); qcc_release(qcc); } @@ -2710,6 +2708,7 @@ static void qmux_strm_detach(struct sedesc *sd) return; release: + qcc_shutdown(qcc); qcc_release(qcc); TRACE_LEAVE(QMUX_EV_STRM_END); return; @@ -2967,6 +2966,7 @@ static int qmux_wake(struct connection *conn) return 0; release: + qcc_shutdown(qcc); qcc_release(qcc); TRACE_LEAVE(QMUX_EV_QCC_WAKE); return 1;