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.