]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
BUG/MINOR: quic: Stalled connections (missing I/O handler wakeup)
authorFrédéric Lécaille <flecaille@haproxy.com>
Wed, 24 Aug 2022 15:57:09 +0000 (17:57 +0200)
committerFrédéric Lécaille <flecaille@haproxy.com>
Wed, 24 Aug 2022 16:13:30 +0000 (18:13 +0200)
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.

src/xprt_quic.c

index 33daf7c5c525d984fe7ba330545bba83610f307a..2dbb4cba077e3eba18664b8e59b7108a9341c92b 100644 (file)
@@ -4545,6 +4545,8 @@ static struct task *process_timer(struct task *task, void *ctx, unsigned int sta
                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;