From: Amaury Denoyelle Date: Tue, 1 Feb 2022 14:15:11 +0000 (+0100) Subject: MINOR: mux-quic: do not consider CONNECTION_CLOSE for the moment X-Git-Tag: v2.6-dev1~7 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d975148776996c71c06d8f0e26c864453c1fc23f;p=thirdparty%2Fhaproxy.git 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. --- 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; }