Index: net/quic/quic_sent_packet_manager.cc |
diff --git a/net/quic/quic_sent_packet_manager.cc b/net/quic/quic_sent_packet_manager.cc |
index c592e133a2c99892ae72119de8fe85efd0185618..a29e69cee9ee28cac28c4b2521dd5052d9093543 100644 |
--- a/net/quic/quic_sent_packet_manager.cc |
+++ b/net/quic/quic_sent_packet_manager.cc |
@@ -270,6 +270,10 @@ void QuicSentPacketManager::HandleAckForSentPackets( |
} |
if (ContainsKey(ack_frame.missing_packets, sequence_number)) { |
+ // Don't continue to increase the nack count for packets not in flight. |
+ if (!it->in_flight) { |
+ continue; |
+ } |
// Consider it multiple nacks when there is a gap between the missing |
// packet and the largest observed, since the purpose of a nack |
// threshold is to tolerate re-ordering. This handles both StretchAcks |
@@ -288,7 +292,7 @@ void QuicSentPacketManager::HandleAckForSentPackets( |
// If data is associated with the most recent transmission of this |
// packet, then inform the caller. |
if (it->in_flight) { |
- packets_acked_[sequence_number] = *it; |
+ packets_acked_.push_back(make_pair(sequence_number, *it)); |
} |
MarkPacketHandled(sequence_number, *it, delta_largest_observed); |
} |
@@ -689,7 +693,7 @@ void QuicSentPacketManager::InvokeLossDetection(QuicTime time) { |
// should be recorded as a loss to the send algorithm, but not retransmitted |
// until it's known whether the FEC packet arrived. |
++stats_->packets_lost; |
- packets_lost_[sequence_number] = transmission_info; |
+ packets_lost_.push_back(make_pair(sequence_number, transmission_info)); |
DVLOG(1) << ENDPOINT << "Lost packet " << sequence_number; |
if (transmission_info.retransmittable_frames != NULL) { |