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.
This commit is contained in:
Amaury Denoyelle 2022-02-01 10:33:09 +01:00
parent aebe26f8ba
commit 1136e9243a

View File

@ -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);
}
}