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 1d9ac9a5c71fd71142eeec0f5db85ab6bd6960b4..ad6193fdd3a083b5f2a42bd7d8dcf09ebc6f7930 100644 |
--- a/net/quic/quic_ack_notifier_manager.cc |
+++ b/net/quic/quic_ack_notifier_manager.cc |
@@ -22,11 +22,10 @@ AckNotifierManager::~AckNotifierManager() { |
STLDeleteElements(&ack_notifiers_); |
} |
-void AckNotifierManager::OnPacketAcked( |
- QuicPacketSequenceNumber sequence_number, |
- QuicTime::Delta delta_largest_observed) { |
+void AckNotifierManager::OnPacketAcked(QuicPacketSequenceNumber sequence_number, |
+ QuicTime::Delta delta_largest_observed) { |
// Inform all the registered AckNotifiers of the new ACK. |
- AckNotifierMap::iterator map_it = ack_notifier_map_.find(sequence_number); |
+ auto map_it = ack_notifier_map_.find(sequence_number); |
if (map_it == ack_notifier_map_.end()) { |
// No AckNotifier is interested in this sequence number. |
return; |
@@ -34,9 +33,8 @@ void AckNotifierManager::OnPacketAcked( |
// One or more AckNotifiers are registered as interested in this sequence |
// number. Iterate through them and call OnAck on each. |
- for (AckNotifierSet::iterator set_it = map_it->second.begin(); |
- set_it != map_it->second.end(); ++set_it) { |
- QuicAckNotifier* ack_notifier = *set_it; |
+ AckNotifierSet& ack_notifier_set = map_it->second; |
+ for (QuicAckNotifier* ack_notifier : ack_notifier_set) { |
ack_notifier->OnAck(sequence_number, delta_largest_observed); |
// If this has resulted in an empty AckNotifer, erase it. |
@@ -54,53 +52,51 @@ void AckNotifierManager::OnPacketAcked( |
void AckNotifierManager::UpdateSequenceNumber( |
QuicPacketSequenceNumber old_sequence_number, |
QuicPacketSequenceNumber new_sequence_number) { |
- AckNotifierMap::iterator map_it = ack_notifier_map_.find(old_sequence_number); |
- if (map_it != ack_notifier_map_.end()) { |
- // We will add an entry to the map for the new sequence number, and move |
- // the |
- // list of AckNotifiers over. |
- AckNotifierSet new_set; |
- for (AckNotifierSet::iterator notifier_it = map_it->second.begin(); |
- notifier_it != map_it->second.end(); ++notifier_it) { |
- (*notifier_it) |
- ->UpdateSequenceNumber(old_sequence_number, new_sequence_number); |
- new_set.insert(*notifier_it); |
- } |
- ack_notifier_map_[new_sequence_number] = new_set; |
- ack_notifier_map_.erase(map_it); |
+ auto map_it = ack_notifier_map_.find(old_sequence_number); |
+ if (map_it == ack_notifier_map_.end()) { |
+ // No AckNotifiers are interested in the old sequence number. |
+ return; |
} |
+ |
+ // Update the existing QuicAckNotifiers to the new sequence number. |
+ AckNotifierSet& ack_notifier_set = map_it->second; |
+ for (QuicAckNotifier* ack_notifier : ack_notifier_set) { |
+ ack_notifier->UpdateSequenceNumber(old_sequence_number, |
+ new_sequence_number); |
+ } |
+ |
+ // The old sequence number is no longer of interest, copy the updated |
+ // AckNotifiers to the new sequence number before deleting the old. |
+ ack_notifier_map_[new_sequence_number] = ack_notifier_set; |
+ ack_notifier_map_.erase(map_it); |
} |
void AckNotifierManager::OnSerializedPacket( |
const SerializedPacket& serialized_packet) { |
- // Run through all the frames and if any of them are stream frames and have |
- // an AckNotifier registered, then inform the AckNotifier that it should be |
- // interested in this packet's sequence number. |
- |
- RetransmittableFrames* frames = serialized_packet.retransmittable_frames; |
- |
// AckNotifiers can only be attached to retransmittable frames. |
- if (!frames) { |
+ RetransmittableFrames* frames = serialized_packet.retransmittable_frames; |
+ if (frames == nullptr) { |
return; |
} |
- for (QuicFrames::const_iterator it = frames->frames().begin(); |
- it != frames->frames().end(); ++it) { |
- if (it->type == STREAM_FRAME && it->stream_frame->notifier != nullptr) { |
- QuicAckNotifier* notifier = it->stream_frame->notifier; |
+ // For each frame in |serialized_packet|, inform any attached AckNotifiers of |
+ // the packet's sequence number. |
+ for (const QuicFrame& quic_frame : frames->frames()) { |
+ if (quic_frame.type != STREAM_FRAME || |
+ quic_frame.stream_frame->notifier == nullptr) { |
+ continue; |
+ } |
- // The AckNotifier needs to know it is tracking this packet's sequence |
- // number. |
- notifier->AddSequenceNumber(serialized_packet.sequence_number, |
- serialized_packet.packet->length()); |
+ QuicAckNotifier* notifier = quic_frame.stream_frame->notifier; |
+ notifier->AddSequenceNumber(serialized_packet.sequence_number, |
+ serialized_packet.packet->length()); |
- // Update the mapping in the other direction, from sequence |
- // number to AckNotifier. |
- ack_notifier_map_[serialized_packet.sequence_number].insert(notifier); |
+ // Update the mapping in the other direction, from sequence number to |
+ // AckNotifier. |
+ ack_notifier_map_[serialized_packet.sequence_number].insert(notifier); |
- // Take ownership of the AckNotifier. |
- ack_notifiers_.insert(notifier); |
- } |
+ // Take ownership of the AckNotifier. |
+ ack_notifiers_.insert(notifier); |
} |
} |