From 1136e9243a31c6ec3cadc6dafd8f3114c21c643e Mon Sep 17 00:00:00 2001 From: Amaury Denoyelle Date: Tue, 1 Feb 2022 10:33:09 +0100 Subject: [PATCH] MEDIUM: mux-quic: delay the closing with the timeout Do not close immediatly the connection if there is no bidirectional stream opened. Schedule instead the mux timeout when this condition is verified. On the timer expiration, the mux/connection can be freed. --- src/mux_quic.c | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/src/mux_quic.c b/src/mux_quic.c index 532304f311..7cd1231717 100644 --- a/src/mux_quic.c +++ b/src/mux_quic.c @@ -391,9 +391,10 @@ static struct task *qc_io_cb(struct task *t, void *ctx, unsigned int status) qc_send(qcc); if (qc_release_detached_streams(qcc)) { - if (qcc_is_dead(qcc)) { - qc_release(qcc); - return NULL; + /* Schedule the mux timeout if no bidirectional streams left. */ + if (qcc_may_expire(qcc)) { + qcc->task->expire = tick_add(now_ms, qcc->timeout); + task_queue(qcc->task); } } @@ -530,9 +531,11 @@ static void qc_detach(struct conn_stream *cs) } qcs_destroy(qcs); - if (qcc_is_dead(qcc)) { - qc_release(qcc); - return; + + /* Schedule the mux timeout if no bidirectional streams left. */ + if (qcc_may_expire(qcc)) { + qcc->task->expire = tick_add(now_ms, qcc->timeout); + task_queue(qcc->task); } } -- 2.47.3