From f89094510c9e74c42596c16fe8c50bdfc25113d4 Mon Sep 17 00:00:00 2001 From: Amaury Denoyelle Date: Wed, 30 Mar 2022 11:51:56 +0200 Subject: [PATCH] BUG/MINOR: mux-quic: ensure to free all qcs on MUX release Remove qcs instances left during qcc MUX release. This can happen when the MUX is closed before the completion of all the transfers, such as on a timeout or process termination. This may free some memory leaks on the connection. --- src/mux_quic.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/mux_quic.c b/src/mux_quic.c index e68b362b95..40e26d65d7 100644 --- a/src/mux_quic.c +++ b/src/mux_quic.c @@ -475,6 +475,8 @@ static void qc_release(struct qcc *qcc) TRACE_ENTER(QMUX_EV_QCC_END); if (qcc) { + struct eb64_node *node; + /* The connection must be aattached to this mux to be released */ if (qcc->conn && qcc->conn->ctx == qcc) conn = qcc->conn; @@ -487,6 +489,14 @@ static void qc_release(struct qcc *qcc) if (qcc->wait_event.tasklet) tasklet_free(qcc->wait_event.tasklet); + /* liberate remaining qcs instances */ + node = eb64_first(&qcc->streams_by_id); + while (node) { + struct qcs *qcs = eb64_entry(node, struct qcs, by_id); + node = eb64_next(node); + qcs_free(qcs); + } + pool_free(pool_head_qcc, qcc); } -- 2.47.3