Prior to this patch, QUIC MUX timeout was only queued after receiving
the first bytes of data. Thus the timeout would be inactive after
initialization if nothing is received, with a risk of connection leak.
To properly address this, QUIC MUX task timeout is now queued
immediately after initialization has been performed.
The risk of connection leak caused by QUIC MUX is now greatly reduced.
For example, the previous issue on RESET_STREAM reception handling
cannot cause anymore such leak with the current code.
This must be backported to all stable releases.
/* Register conn for idle front closing. */
LIST_APPEND(&mux_stopping_data[tid].list, &conn->stopping_list);
+ if (tick_isset(qcc->task->expire)) {
+ /* Activate client timeout until the first bytes of data are received. */
+ TRACE_DEVEL("activate default timeout", QMUX_EV_QCC_NEW, conn);
+ task_queue(qcc->task);
+ }
+
/* init read cycle */
tasklet_wakeup(qcc->wait_event.tasklet);