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 cb21f6104f1ef99ed1879558b758965582bb107f..a21d4a5c541bdc7494a947fcfb176cec6bdb29dd 100644 |
--- a/net/quic/quic_unacked_packet_map.cc |
+++ b/net/quic/quic_unacked_packet_map.cc |
@@ -126,19 +126,13 @@ void QuicUnackedPacketMap::RemovePacket( |
LOG(DFATAL) << "packet is not unacked: " << sequence_number; |
return; |
} |
- const TransmissionInfo& transmission_info = it->second; |
- transmission_info.all_transmissions->erase(sequence_number); |
- if (transmission_info.all_transmissions->empty()) { |
- delete transmission_info.all_transmissions; |
- } |
- if (transmission_info.retransmittable_frames != NULL) { |
- if (transmission_info.retransmittable_frames->HasCryptoHandshake() |
- == IS_HANDSHAKE) { |
- --pending_crypto_packet_count_; |
- } |
- delete transmission_info.retransmittable_frames; |
+ 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; |
} |
- DCHECK(!transmission_info.pending); |
unacked_packets_.erase(it); |
} |
@@ -150,11 +144,17 @@ void QuicUnackedPacketMap::NeuterPacket( |
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) { |
transmission_info->all_transmissions->erase(sequence_number); |
transmission_info->all_transmissions = new SequenceNumberSet(); |
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) { |