From 77217e144e6af02768644f473df4d4c596765460 Mon Sep 17 00:00:00 2001 From: ianswett Date: Tue, 24 Nov 2020 21:09:02 -0500 Subject: [PATCH 1/4] Always save the packet size and return early When the packet is not in_flight, return early instead of not saving the size earlier. FIxes #4408 --- draft-ietf-quic-recovery.md | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/draft-ietf-quic-recovery.md b/draft-ietf-quic-recovery.md index ba5626fead..1be4eb2920 100644 --- a/draft-ietf-quic-recovery.md +++ b/draft-ietf-quic-recovery.md @@ -1335,12 +1335,11 @@ OnPacketSent(packet_number, pn_space, ack_eliciting, sent_packets[pn_space][packet_number].ack_eliciting = ack_eliciting sent_packets[pn_space][packet_number].in_flight = in_flight + sent_packets[pn_space][packet_number].sent_bytes = sent_bytes if (in_flight): if (ack_eliciting): time_of_last_ack_eliciting_packet[pn_space] = now() OnPacketSentCC(sent_bytes) - sent_packets[pn_space][packet_number].sent_bytes = - sent_bytes SetLossDetectionTimer() ~~~ @@ -1717,8 +1716,8 @@ Whenever a packet is sent, and it contains non-ACK frames, the packet increases bytes_in_flight. ~~~ -OnPacketSentCC(bytes_sent): - bytes_in_flight += bytes_sent +OnPacketSentCC(sent_bytes): + bytes_in_flight += sent_bytes ~~~ @@ -1740,6 +1739,8 @@ OnPacketsAcked(acked_packets): OnPacketAcked(acked_packet) OnPacketAcked(acked_packet): + if (ack_packet.in_flight): + return; // Remove from bytes_in_flight. bytes_in_flight -= acked_packet.sent_bytes // Do not increase congestion_window if application From 2a626247c7f564ed17522ea2ee0ba4009b070237 Mon Sep 17 00:00:00 2001 From: ianswett Date: Tue, 24 Nov 2020 21:10:41 -0500 Subject: [PATCH 2/4] Update draft-ietf-quic-recovery.md --- draft-ietf-quic-recovery.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/draft-ietf-quic-recovery.md b/draft-ietf-quic-recovery.md index 1be4eb2920..71bb9c3e6b 100644 --- a/draft-ietf-quic-recovery.md +++ b/draft-ietf-quic-recovery.md @@ -1739,7 +1739,7 @@ OnPacketsAcked(acked_packets): OnPacketAcked(acked_packet) OnPacketAcked(acked_packet): - if (ack_packet.in_flight): + if (!ack_packet.in_flight): return; // Remove from bytes_in_flight. bytes_in_flight -= acked_packet.sent_bytes From a435847b8d88d24563fb6df35790e5cc6057b7d0 Mon Sep 17 00:00:00 2001 From: ianswett Date: Wed, 25 Nov 2020 09:40:28 -0500 Subject: [PATCH 3/4] Update draft-ietf-quic-recovery.md Co-authored-by: Jana Iyengar --- draft-ietf-quic-recovery.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/draft-ietf-quic-recovery.md b/draft-ietf-quic-recovery.md index 71bb9c3e6b..87c3a13834 100644 --- a/draft-ietf-quic-recovery.md +++ b/draft-ietf-quic-recovery.md @@ -1739,7 +1739,7 @@ OnPacketsAcked(acked_packets): OnPacketAcked(acked_packet) OnPacketAcked(acked_packet): - if (!ack_packet.in_flight): + if (!acked_packet.in_flight): return; // Remove from bytes_in_flight. bytes_in_flight -= acked_packet.sent_bytes From bffe2820703e8a29667241cc6547c763851affa9 Mon Sep 17 00:00:00 2001 From: ianswett Date: Wed, 25 Nov 2020 09:44:56 -0500 Subject: [PATCH 4/4] Add an assert Only in_flight packets are added to lost_packets, so adding an assert to improve readability. --- draft-ietf-quic-recovery.md | 1 + 1 file changed, 1 insertion(+) diff --git a/draft-ietf-quic-recovery.md b/draft-ietf-quic-recovery.md index 87c3a13834..8cec3bc66f 100644 --- a/draft-ietf-quic-recovery.md +++ b/draft-ietf-quic-recovery.md @@ -1805,6 +1805,7 @@ Invoked when DetectAndRemoveLostPackets deems packets lost. OnPacketsLost(lost_packets): // Remove lost packets from bytes_in_flight. for lost_packet in lost_packets: + assert(lost_packet.in_flight) bytes_in_flight -= lost_packet.sent_bytes OnCongestionEvent(lost_packets.largest().time_sent)