Index: net/quic/quic_unacked_packet_map.cc |
diff --git a/net/quic/quic_unacked_packet_map.cc b/net/quic/quic_unacked_packet_map.cc |
index 563b53dfe92d1da8dd141d729b36def31d342aa4..a07de8b3a8b890f5f535de7bff141487aa91fd7c 100644 |
--- a/net/quic/quic_unacked_packet_map.cc |
+++ b/net/quic/quic_unacked_packet_map.cc |
@@ -74,6 +74,15 @@ void QuicUnackedPacketMap::OnRetransmittedPacket( |
// We keep the old packet in the unacked packet list until it, or one of |
// the retransmissions of it are acked. |
transmission_info->retransmittable_frames = NULL; |
+ // Only keep one transmission older than largest observed, because only the |
+ // most recent is expected to possibly be a spurious retransmission. |
+ if (transmission_info->all_transmissions->size() > 1 && |
+ *(++transmission_info->all_transmissions->begin()) < largest_observed_) { |
+ QuicPacketSequenceNumber old_transmission = |
+ *transmission_info->all_transmissions->begin(); |
+ transmission_info->all_transmissions->erase(old_transmission); |
+ unacked_packets_.erase(old_transmission); |
+ } |
unacked_packets_[new_sequence_number] = |
TransmissionInfo(frames, |
new_sequence_number, |