From dafbde6c8c9d3f8b83175c00517a96276fa89151 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20L=C3=A9caille?= Date: Tue, 26 Apr 2022 13:54:28 +0200 Subject: [PATCH] MINOR: quic: Wake up the mux to probe with new data When we have to probe the peer, we must first try to send new data. This is done here waking up the mux after having set the number of maximum number of datagrams to send to QUIC_MAX_NB_PTO_DGRAMS (2). Of course, this is only the case if the mux was subscribed to SEND events. --- src/xprt_quic.c | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/src/xprt_quic.c b/src/xprt_quic.c index f1e4d28fe..12833c352 100644 --- a/src/xprt_quic.c +++ b/src/xprt_quic.c @@ -4244,12 +4244,24 @@ static struct task *process_timer(struct task *task, void *ctx, unsigned int sta } if (qc->path->in_flight) { - qc->flags |= QUIC_FL_CONN_RETRANS_NEEDED; pktns = quic_pto_pktns(qc, qc->state >= QUIC_HS_ST_COMPLETE, NULL); - pktns->flags |= QUIC_FL_PKTNS_PROBE_NEEDED; - if (pktns == &qc->pktns[QUIC_TLS_PKTNS_INITIAL]) { - if (qc->pktns[QUIC_TLS_PKTNS_HANDSHAKE].tx.in_flight) - qc->pktns[QUIC_TLS_PKTNS_HANDSHAKE].flags |= QUIC_FL_PKTNS_PROBE_NEEDED; + if (qc->mux_state == QC_MUX_READY && qc->qcc->subs && + qc->qcc->subs->events & SUB_RETRY_SEND) { + struct qcc *qcc = qc->qcc; + + pktns->tx.pto_probe = QUIC_MAX_NB_PTO_DGRAMS; + tasklet_wakeup(qcc->subs->tasklet); + qcc->subs->events &= ~SUB_RETRY_SEND; + if (!qcc->subs->events) + qcc->subs = NULL; + } + else { + qc->flags |= QUIC_FL_CONN_RETRANS_NEEDED; + pktns->flags |= QUIC_FL_PKTNS_PROBE_NEEDED; + if (pktns == &qc->pktns[QUIC_TLS_PKTNS_INITIAL]) { + if (qc->pktns[QUIC_TLS_PKTNS_HANDSHAKE].tx.in_flight) + qc->pktns[QUIC_TLS_PKTNS_HANDSHAKE].flags |= QUIC_FL_PKTNS_PROBE_NEEDED; + } } } else if (!qc_is_listener(qc) && qc->state <= QUIC_HS_ST_COMPLETE) {