Skip to content

Commit 8b464de

Browse files
committed
Account for queued application datagrams when composing TLPs
1 parent a62c56c commit 8b464de

File tree

2 files changed

+9
-4
lines changed

2 files changed

+9
-4
lines changed

quinn-proto/src/connection/mod.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -470,7 +470,11 @@ impl Connection {
470470
for space in SpaceId::iter() {
471471
let request_immediate_ack =
472472
space == SpaceId::Data && self.peer_supports_ack_frequency();
473-
self.spaces[space].maybe_queue_probe(request_immediate_ack, &self.streams);
473+
self.spaces[space].maybe_queue_probe(
474+
request_immediate_ack,
475+
&self.streams,
476+
&self.datagrams,
477+
);
474478
}
475479

476480
// Check whether we need to send a close message

quinn-proto/src/connection/spaces.rs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ use rand::Rng;
99
use rustc_hash::FxHashSet;
1010
use tracing::trace;
1111

12-
use super::assembler::Assembler;
12+
use super::{assembler::Assembler, datagrams::DatagramState};
1313
use crate::{
1414
Dir, Duration, Instant, SocketAddr, StreamId, TransportError, VarInt, connection::StreamsState,
1515
crypto::Keys, frame, packet::SpaceId, range_set::ArrayRangeSet, shared::IssuedCid,
@@ -118,6 +118,7 @@ impl PacketSpace {
118118
&mut self,
119119
request_immediate_ack: bool,
120120
streams: &StreamsState,
121+
datagrams: &DatagramState,
121122
) {
122123
if self.loss_probes == 0 {
123124
return;
@@ -129,12 +130,12 @@ impl PacketSpace {
129130
self.immediate_ack_pending = true;
130131
}
131132

132-
// Retransmit the data of the oldest in-flight packet
133-
if !self.pending.is_empty(streams) {
133+
if !self.pending.is_empty(streams) || !datagrams.outgoing.is_empty() {
134134
// There's real data to send here, no need to make something up
135135
return;
136136
}
137137

138+
// Retransmit the data of the oldest in-flight packet
138139
for packet in self.sent_packets.values_mut() {
139140
if !packet.retransmits.is_empty(streams) {
140141
// Remove retransmitted data from the old packet so we don't end up retransmitting

0 commit comments

Comments
 (0)