From d975148776996c71c06d8f0e26c864453c1fc23f Mon Sep 17 00:00:00 2001 From: Amaury Denoyelle Date: Tue, 1 Feb 2022 15:15:11 +0100 Subject: [PATCH] MINOR: mux-quic: do not consider CONNECTION_CLOSE for the moment Remove the condition on CONNECTION_CLOSE reception to close immediately streams. It can cause some crash as the QUIC xprt layer still access the qcs to send data and handle ACK. The whole interface and buffering between QUIC xprt and mux must be properly reorganized to better handle this case. Once this is done, it may have some sense to free the qcs streams on CONNECTION_CLOSE reception. --- src/mux_quic.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/mux_quic.c b/src/mux_quic.c index bdb15cefa6..9efb2f232d 100644 --- a/src/mux_quic.c +++ b/src/mux_quic.c @@ -355,8 +355,7 @@ static int qc_release_detached_streams(struct qcc *qcc) node = eb64_next(node); if (qcs->flags & QC_SF_DETACH) { - if ((!b_data(&qcs->tx.buf) && !b_data(&qcs->tx.xprt_buf)) || - qcc->flags & QC_CF_CC_RECV) { + if ((!b_data(&qcs->tx.buf) && !b_data(&qcs->tx.xprt_buf))) { qcs_destroy(qcs); release = 1; } @@ -466,8 +465,12 @@ static void qc_detach(struct conn_stream *cs) fprintf(stderr, "%s: leaving with tx.buf.data=%lu, tx.xprt_buf.data=%lu\n", __func__, b_data(&qcs->tx.buf), b_data(&qcs->tx.xprt_buf)); - if ((b_data(&qcs->tx.buf) || b_data(&qcs->tx.xprt_buf)) && - !(qcc->flags & QC_CF_CC_RECV)) { + /* TODO on CONNECTION_CLOSE reception, it should be possible to free + * qcs instances. This should be done once the buffering and ACK + * managment between xprt and mux is reorganized. + */ + + if ((b_data(&qcs->tx.buf) || b_data(&qcs->tx.xprt_buf))) { qcs->flags |= QC_SF_DETACH; return; } -- 2.47.3