BUG/MINOR: quic: Stalled connections (missing I/O handler wakeup)
This was due to a missing I/O handler tasklet wakeup in process_timer() when
detecting packet loss. As, qc_release_lost_pkts() could remove the lost packets
from the in flight packets count, qc_set_timer() could cancel the timer used
to wakeup the connection I/O handler. Then the connection could remain idle
until it ends.
Must be backported to 2.6.
diff --git a/src/xprt_quic.c b/src/xprt_quic.c
index 33daf7c..2dbb4cb 100644
--- a/src/xprt_quic.c
+++ b/src/xprt_quic.c
@@ -4545,6 +4545,8 @@
struct list lost_pkts = LIST_HEAD_INIT(lost_pkts);
qc_packet_loss_lookup(pktns, qc, &lost_pkts);
+ if (!LIST_ISEMPTY(&lost_pkts))
+ tasklet_wakeup(conn_ctx->wait_event.tasklet);
qc_release_lost_pkts(qc, pktns, &lost_pkts, now_ms);
qc_set_timer(qc);
goto out;