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 d75991ede3eccc745d9e756aa64850a0f3e0c0b3..a21d4a5c541bdc7494a947fcfb176cec6bdb29dd 100644 |
--- a/net/quic/quic_unacked_packet_map.cc |
+++ b/net/quic/quic_unacked_packet_map.cc |
@@ -91,7 +91,7 @@ void QuicUnackedPacketMap::ClearPreviousRetransmissions(size_t num_to_clear) { |
} |
++it; |
- NeuterIfPendingOrRemovePacket(sequence_number); |
+ RemovePacket(sequence_number); |
--num_to_clear; |
} |
} |
@@ -119,7 +119,7 @@ void QuicUnackedPacketMap::NackPacket(QuicPacketSequenceNumber sequence_number, |
it->second.nack_count = max(min_nacks, it->second.nack_count); |
} |
-void QuicUnackedPacketMap::NeuterIfPendingOrRemovePacket( |
+void QuicUnackedPacketMap::RemovePacket( |
QuicPacketSequenceNumber sequence_number) { |
UnackedPacketMap::iterator it = unacked_packets_.find(sequence_number); |
if (it == unacked_packets_.end()) { |
@@ -127,6 +127,34 @@ void QuicUnackedPacketMap::NeuterIfPendingOrRemovePacket( |
return; |
} |
TransmissionInfo* transmission_info = &it->second; |
+ DCHECK(!transmission_info->pending); |
+ MaybeRemoveRetransmittableFrames(transmission_info); |
+ transmission_info->all_transmissions->erase(sequence_number); |
+ if (transmission_info->all_transmissions->empty()) { |
+ delete transmission_info->all_transmissions; |
wtc
2014/05/13 18:49:23
IMPORTANT: should we set transmission_info->all_tr
Ian Swett
2014/05/13 18:58:28
It shouldn't matter, since the element is being er
|
+ } |
+ unacked_packets_.erase(it); |
+} |
+ |
+void QuicUnackedPacketMap::NeuterPacket( |
+ QuicPacketSequenceNumber sequence_number) { |
+ UnackedPacketMap::iterator it = unacked_packets_.find(sequence_number); |
+ if (it == unacked_packets_.end()) { |
+ LOG(DFATAL) << "packet is not unacked: " << sequence_number; |
+ return; |
+ } |
+ TransmissionInfo* transmission_info = &it->second; |
+ // TODO(ianswett): Ensure packets are pending before neutering them. |
+ MaybeRemoveRetransmittableFrames(transmission_info); |
+ if (transmission_info->all_transmissions->size() > 1) { |
wtc
2014/05/13 18:49:23
Can you explain why we only do the following when
Ian Swett
2014/05/13 18:58:28
Neuter packet is supposed to remove the retranmitt
|
+ transmission_info->all_transmissions->erase(sequence_number); |
+ transmission_info->all_transmissions = new SequenceNumberSet(); |
wtc
2014/05/13 18:49:23
IMPORTANT: do we leak the old value of transmissio
Ian Swett
2014/05/13 18:58:28
No, if the map's size > 1, that means someone else
|
+ transmission_info->all_transmissions->insert(sequence_number); |
+ } |
+} |
+ |
+void QuicUnackedPacketMap::MaybeRemoveRetransmittableFrames( |
+ TransmissionInfo* transmission_info) { |
if (transmission_info->retransmittable_frames != NULL) { |
if (transmission_info->retransmittable_frames->HasCryptoHandshake() |
== IS_HANDSHAKE) { |
@@ -135,21 +163,6 @@ void QuicUnackedPacketMap::NeuterIfPendingOrRemovePacket( |
delete transmission_info->retransmittable_frames; |
transmission_info->retransmittable_frames = NULL; |
} |
- if (transmission_info->pending) { |
- // Neuter it so it can't be retransmitted. |
- if (transmission_info->all_transmissions->size() > 1) { |
- transmission_info->all_transmissions->erase(sequence_number); |
- transmission_info->all_transmissions = new SequenceNumberSet(); |
- transmission_info->all_transmissions->insert(sequence_number); |
- } |
- } else { |
- // Remove it. |
- transmission_info->all_transmissions->erase(sequence_number); |
- if (transmission_info->all_transmissions->empty()) { |
- delete transmission_info->all_transmissions; |
- } |
- unacked_packets_.erase(it); |
- } |
} |
// static |
@@ -165,13 +178,6 @@ bool QuicUnackedPacketMap::IsUnacked( |
return ContainsKey(unacked_packets_, sequence_number); |
} |
-bool QuicUnackedPacketMap::IsPending( |
- QuicPacketSequenceNumber sequence_number) const { |
- const TransmissionInfo* transmission_info = |
- FindOrNull(unacked_packets_, sequence_number); |
- return transmission_info != NULL && transmission_info->pending; |
-} |
- |
void QuicUnackedPacketMap::SetNotPending( |
QuicPacketSequenceNumber sequence_number) { |
UnackedPacketMap::iterator it = unacked_packets_.find(sequence_number); |
@@ -286,15 +292,6 @@ QuicUnackedPacketMap::GetLeastUnackedSentPacket() const { |
return unacked_packets_.begin()->first; |
} |
-SequenceNumberSet QuicUnackedPacketMap::GetUnackedPackets() const { |
- SequenceNumberSet unacked_packets; |
- for (UnackedPacketMap::const_iterator it = unacked_packets_.begin(); |
- it != unacked_packets_.end(); ++it) { |
- unacked_packets.insert(it->first); |
- } |
- return unacked_packets; |
-} |
- |
void QuicUnackedPacketMap::SetSent(QuicPacketSequenceNumber sequence_number, |
QuicTime sent_time, |
QuicByteCount bytes_sent, |