gfe-relnote: In QUIC, when RTO fires and there is no packet to be RTOed, let connection send data. Protected by gfe2_reloadable_flag_quic_fix_rto_retransmission2 which replaces gfe2_reloadable_flag_quic_fix_rto_retransmission.

This fix only applies for version > 39.

PiperOrigin-RevId: 262347120
Change-Id: Ic164c2f9e7117c3f9af43f1f1a3e8b369d8a3052
diff --git a/quic/core/quic_connection.cc b/quic/core/quic_connection.cc
index a577bf1..ce60171 100644
--- a/quic/core/quic_connection.cc
+++ b/quic/core/quic_connection.cc
@@ -2469,12 +2469,12 @@
 
   if (sent_packet_manager_.fix_rto_retransmission()) {
     // Making sure at least one packet is created when retransmission timer
-    // fires in TLP, RTO or HANDSHAKE mode. It is possible that loss algorithm
-    // invokes timer based loss but the packet does not need to be
-    // retransmitted.
-    QUIC_BUG_IF(stats_.loss_timeout_count == previous_loss_timeout_count &&
-                packet_generator_.packet_number() ==
-                    previous_created_packet_number)
+    // fires in TLP. It is possible that loss algorithm invokes timer based loss
+    // but the packet does not need to be retransmitted. And no packets will be
+    // sent if timer fires in HANDSHAKE or RTO mode but writer is blocked.
+    QUIC_BUG_IF(packet_generator_.packet_number() ==
+                    previous_created_packet_number &&
+                stats_.tlp_count != previous_tlp_count)
         << "previous_crypto_retransmit_count: "
         << previous_crypto_retransmit_count
         << ", crypto_retransmit_count: " << stats_.crypto_retransmit_count
@@ -2487,7 +2487,8 @@
         << ", previous_created_packet_number: "
         << previous_created_packet_number
         << ", packet_number: " << packet_generator_.packet_number()
-        << ", session has data to write: " << visitor_->WillingAndAbleToWrite();
+        << ", session has data to write: " << visitor_->WillingAndAbleToWrite()
+        << ", writer is blocked: " << writer_->IsWriteBlocked();
   }
 
   // Ensure the retransmission alarm is always set if there are unacked packets