Index: net/quic/quic_sent_packet_manager.cc |
diff --git a/net/quic/quic_sent_packet_manager.cc b/net/quic/quic_sent_packet_manager.cc |
index b9c8d22c8a06fea3e3c89f3a21997a895026f042..c0041978a2fd498319dc1a88dc3d7e7482f25ee5 100644 |
--- a/net/quic/quic_sent_packet_manager.cc |
+++ b/net/quic/quic_sent_packet_manager.cc |
@@ -148,31 +148,6 @@ bool QuicSentPacketManager::HasClientSentConnectionOption( |
return false; |
} |
-void QuicSentPacketManager::OnRetransmittedPacket( |
- QuicPacketSequenceNumber old_sequence_number, |
- QuicPacketSequenceNumber new_sequence_number) { |
- TransmissionType transmission_type; |
- PendingRetransmissionMap::iterator it = |
- pending_retransmissions_.find(old_sequence_number); |
- if (it != pending_retransmissions_.end()) { |
- transmission_type = it->second; |
- pending_retransmissions_.erase(it); |
- } else { |
- DLOG(DFATAL) << "Expected sequence number to be in " |
- "pending_retransmissions_. sequence_number: " << old_sequence_number; |
- transmission_type = NOT_RETRANSMISSION; |
- } |
- |
- // A notifier may be waiting to hear about ACKs for the original sequence |
- // number. Inform them that the sequence number has changed. |
- ack_notifier_manager_.UpdateSequenceNumber(old_sequence_number, |
- new_sequence_number); |
- |
- unacked_packets_.OnRetransmittedPacket(old_sequence_number, |
- new_sequence_number, |
- transmission_type); |
-} |
- |
void QuicSentPacketManager::OnIncomingAck(const QuicAckFrame& ack_frame, |
QuicTime ack_receive_time) { |
QuicByteCount bytes_in_flight = unacked_packets_.bytes_in_flight(); |
@@ -451,8 +426,8 @@ void QuicSentPacketManager::MarkPacketHandled( |
const TransmissionInfo& info, |
QuicTime::Delta delta_largest_observed) { |
QuicPacketSequenceNumber newest_transmission = |
- info.all_transmissions == nullptr ? sequence_number |
- : *info.all_transmissions->rbegin(); |
+ info.all_transmissions == nullptr ? |
+ sequence_number : *info.all_transmissions->rbegin(); |
// Remove the most recent packet, if it is pending retransmission. |
pending_retransmissions_.erase(newest_transmission); |
@@ -508,10 +483,20 @@ bool QuicSentPacketManager::OnPacketSent( |
if (serialized_packet->retransmittable_frames) { |
ack_notifier_manager_.OnSerializedPacket(*serialized_packet); |
} |
- unacked_packets_.AddPacket(*serialized_packet); |
- serialized_packet->retransmittable_frames = nullptr; |
} else { |
- OnRetransmittedPacket(original_sequence_number, sequence_number); |
+ PendingRetransmissionMap::iterator it = |
+ pending_retransmissions_.find(original_sequence_number); |
+ if (it != pending_retransmissions_.end()) { |
+ pending_retransmissions_.erase(it); |
+ } else { |
+ DLOG(DFATAL) << "Expected sequence number to be in " |
+ << "pending_retransmissions_. sequence_number: " |
+ << original_sequence_number; |
+ } |
+ // A notifier may be waiting to hear about ACKs for the original sequence |
+ // number. Inform them that the sequence number has changed. |
+ ack_notifier_manager_.UpdateSequenceNumber(original_sequence_number, |
+ sequence_number); |
} |
if (pending_timer_transmission_count_ > 0) { |
@@ -533,8 +518,15 @@ bool QuicSentPacketManager::OnPacketSent( |
sequence_number, |
bytes, |
has_retransmittable_data); |
- unacked_packets_.SetSent(sequence_number, sent_time, bytes, in_flight); |
- |
+ unacked_packets_.AddSentPacket(*serialized_packet, |
+ original_sequence_number, |
+ transmission_type, |
+ sent_time, |
+ bytes, |
+ in_flight); |
+ |
+ // Take ownership of the retransmittable frames before exiting. |
+ serialized_packet->retransmittable_frames = nullptr; |
// Reset the retransmission timer anytime a pending packet is sent. |
return in_flight; |
} |