| 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);
|
| }
|
| }
|
| }
|
|
|