From: Amaury Denoyelle Date: Fri, 24 Sep 2021 08:05:30 +0000 (+0200) Subject: MINOR: mux-quic: release connection if no more bidir streams X-Git-Tag: v2.5-dev9~38 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d595f108dbcb3bed48f3a327b5448dd084ee29a7;p=thirdparty%2Fhaproxy.git MINOR: mux-quic: release connection if no more bidir streams Use the count of bidirectional streams to call qc_release in qc_detach. We cannot inspect the by_id tree because uni-streams are never removed from it. This allows the connection to be properly freed. --- diff --git a/src/mux_quic.c b/src/mux_quic.c index 19b021acbf..ba0a4a0a0a 100644 --- a/src/mux_quic.c +++ b/src/mux_quic.c @@ -911,6 +911,7 @@ static void qcs_destroy(struct qcs *qcs) * we're in it, we're getting out anyway */ LIST_DEL_INIT(&qcs->list); + --qcs->qcc->strms[qcs_id_type(qcs->id)].nb_streams; /* ditto, calling tasklet_free() here should be ok */ tasklet_free(qcs->shut_tl); @@ -1600,7 +1601,7 @@ static void qc_detach(struct conn_stream *cs) TRACE_ENTER(QC_EV_STRM_END, qcs ? qcs->qcc->conn : NULL, qcs); qcs_destroy(qcs); - if (eb_is_empty(&qcc->streams_by_id)) + if (!qcc->strms[QCS_CLT_BIDI].nb_streams) qc_release(qcc); TRACE_LEAVE(QC_EV_STRM_END, qcs ? qcs->qcc->conn : NULL); }