From: Amaury Denoyelle Date: Tue, 1 Feb 2022 09:33:09 +0000 (+0100) Subject: MEDIUM: mux-quic: delay the closing with the timeout X-Git-Tag: v2.6-dev1~5 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=1136e9243a31c6ec3cadc6dafd8f3114c21c643e;p=thirdparty%2Fhaproxy.git 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. --- 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); } }