Index: net/quic/quic_ack_notifier_manager.cc |
diff --git a/net/quic/quic_ack_notifier_manager.cc b/net/quic/quic_ack_notifier_manager.cc |
index 613ba4c01ab3739a10fb990ab03646df9bd53ac6..357c5469133e19d50abc9fe4133a159143c3609a 100644 |
--- a/net/quic/quic_ack_notifier_manager.cc |
+++ b/net/quic/quic_ack_notifier_manager.cc |
@@ -20,7 +20,13 @@ namespace net { |
AckNotifierManager::AckNotifierManager() {} |
AckNotifierManager::~AckNotifierManager() { |
- STLDeleteElements(&ack_notifiers_); |
+ for (const auto& pair : ack_notifier_map_) { |
+ for (QuicAckNotifier* notifier : pair.second) { |
+ if (notifier->OnPacketAbandoned()) { |
+ delete notifier; |
+ } |
+ } |
+ } |
} |
void AckNotifierManager::OnPacketAcked(QuicPacketSequenceNumber sequence_number, |
@@ -39,9 +45,8 @@ void AckNotifierManager::OnPacketAcked(QuicPacketSequenceNumber sequence_number, |
ack_notifier->OnAck(sequence_number, delta_largest_observed); |
// If this has resulted in an empty AckNotifer, erase it. |
- if (ack_notifier->IsEmpty()) { |
+ if (!ack_notifier->HasUnackedPackets()) { |
delete ack_notifier; |
- ack_notifiers_.erase(ack_notifier); |
} |
} |
@@ -86,9 +91,6 @@ void AckNotifierManager::OnSerializedPacket( |
// Update the mapping in the other direction, from sequence number to |
// AckNotifier. |
ack_notifier_map_[serialized_packet.sequence_number].push_back(notifier); |
- |
- // Take ownership of the AckNotifier. |
- ack_notifiers_.insert(notifier); |
} |
} else { |
// AckNotifiers can only be attached to retransmittable frames. |
@@ -111,9 +113,6 @@ void AckNotifierManager::OnSerializedPacket( |
// Update the mapping in the other direction, from sequence number to |
// AckNotifier. |
ack_notifier_map_[serialized_packet.sequence_number].push_back(notifier); |
- |
- // Take ownership of the AckNotifier. |
- ack_notifiers_.insert(notifier); |
} |
} |
} |