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 17cd836b812c12fd2b6463e51830fc9977180053..d7f0a6060b5b1620b8a410893b135b7e516f163b 100644 |
--- a/net/quic/quic_sent_packet_manager.cc |
+++ b/net/quic/quic_sent_packet_manager.cc |
@@ -408,6 +408,9 @@ void QuicSentPacketManager::OnRetransmissionTimeout() { |
++stats_->crypto_retransmit_count; |
RetransmitCryptoPackets(); |
return; |
+ case LOSS_MODE: |
+ InvokeLossDetection(clock_->Now()); |
+ return; |
case TLP_MODE: |
// If no tail loss probe can be sent, because there are no retransmittable |
// packets, execute a conventional RTO to abandon old packets. |
@@ -497,6 +500,9 @@ QuicSentPacketManager::RetransmissionTimeoutMode |
if (pending_crypto_packet_count_ > 0) { |
return HANDSHAKE_MODE; |
} |
+ if (loss_algorithm_->GetLossTimeout() != QuicTime::Zero()) { |
+ return LOSS_MODE; |
+ } |
if (consecutive_tlp_count_ < max_tail_loss_probes_) { |
if (unacked_packets_.HasUnackedRetransmittableFrames()) { |
return TLP_MODE; |
@@ -639,6 +645,8 @@ const QuicTime QuicSentPacketManager::GetRetransmissionTime() const { |
switch (GetRetransmissionMode()) { |
case HANDSHAKE_MODE: |
return clock_->ApproximateNow().Add(GetCryptoRetransmissionDelay()); |
+ case LOSS_MODE: |
+ return loss_algorithm_->GetLossTimeout(); |
case TLP_MODE: { |
// TODO(ianswett): When CWND is available, it would be preferable to |
// set the timer based on the earliest retransmittable packet. |