From 009016c0cdc0a725e621d334968b974ff71b311a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20L=C3=A9caille?= Date: Wed, 30 Mar 2022 14:58:55 +0200 Subject: [PATCH] BUG/MINOR: quic: Non duplicated frames upon fast retransmission We must duplicate the frames to be sent again from packets which are not deemed lost. --- src/xprt_quic.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/xprt_quic.c b/src/xprt_quic.c index c48d1c251..591751871 100644 --- a/src/xprt_quic.c +++ b/src/xprt_quic.c @@ -2347,10 +2347,18 @@ static void qc_prep_hdshk_fast_retrans(struct quic_conn *qc) qel->pktns->tx.pto_probe += 1; requeue: list_for_each_entry_safe(frm, frmbak, &pkt->frms, list) { + struct quic_frame *dup_frm; + + + dup_frm = pool_alloc(pool_head_quic_frame); + if (!dup_frm) { + TRACE_PROTO("could not duplicate frame", QUIC_EV_CONN_PRSAFRM, qc, frm); + break; + } + TRACE_PROTO("to resend frame", QUIC_EV_CONN_PRSAFRM, qc, frm); - LIST_DELETE(&frm->list); - frm->pkt = NULL; - LIST_APPEND(tmp, &frm->list); + *dup_frm = *frm; + LIST_APPEND(tmp, &dup_frm->list); } if (qel == iqel) {