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 532304f..7cd1231 100644
--- a/src/mux_quic.c
+++ b/src/mux_quic.c
@@ -391,9 +391,10 @@
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 @@
}
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);
}
}