Add a QUIC_BUG in QuicReceivedPacketManager::GetUpdatedAckFrame to detect dead loops.
PiperOrigin-RevId: 542325216
diff --git a/quiche/quic/core/quic_received_packet_manager.cc b/quiche/quic/core/quic_received_packet_manager.cc
index faa27e6..6b566f4 100644
--- a/quiche/quic/core/quic_received_packet_manager.cc
+++ b/quiche/quic/core/quic_received_packet_manager.cc
@@ -174,8 +174,18 @@
? QuicTime::Delta::Zero()
: approximate_now - time_largest_observed_;
}
+
+ const size_t initial_ack_ranges = ack_frame_.packets.NumIntervals();
+ uint64_t num_iterations = 0;
while (max_ack_ranges_ > 0 &&
ack_frame_.packets.NumIntervals() > max_ack_ranges_) {
+ num_iterations++;
+ QUIC_BUG_IF(quic_rpm_too_many_ack_ranges, (num_iterations % 100000) == 0)
+ << "Too many ack ranges to remove, possibly a dead loop. "
+ "initial_ack_ranges:"
+ << initial_ack_ranges << " max_ack_ranges:" << max_ack_ranges_
+ << ", current_ack_ranges:" << ack_frame_.packets.NumIntervals()
+ << " num_iterations:" << num_iterations;
ack_frame_.packets.RemoveSmallestInterval();
}
// Clear all packet times if any are too far from largest observed.