From: Amaury Denoyelle Date: Wed, 30 Mar 2022 09:51:56 +0000 (+0200) Subject: BUG/MINOR: mux-quic: ensure to free all qcs on MUX release X-Git-Tag: v2.6-dev5~85 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=f89094510c9e74c42596c16fe8c50bdfc25113d4;p=thirdparty%2Fhaproxy.git 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. --- 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); }