In QUIC, do not test liveness if timeout is longer than half idle timeout. Client side only, not protected.
PiperOrigin-RevId: 326442623
Change-Id: I9705bf200cda45a9927d723f506885605303d707
diff --git a/quic/core/quic_connection.cc b/quic/core/quic_connection.cc
index b1c95b7..abc0be6 100644
--- a/quic/core/quic_connection.cc
+++ b/quic/core/quic_connection.cc
@@ -665,6 +665,11 @@
return false;
}
const QuicTime::Delta timeout = idle_network_deadline - now;
+ if (2 * timeout > idle_network_detector_.idle_network_timeout()) {
+ // Do not test liveness if timeout is > half timeout. This is used to
+ // prevent an infinite loop for short idle timeout.
+ return false;
+ }
if (!sent_packet_manager_.IsLessThanThreePTOs(timeout)) {
return false;
}
diff --git a/quic/tools/quic_spdy_client_base.cc b/quic/tools/quic_spdy_client_base.cc
index f7d86aa..09de813 100644
--- a/quic/tools/quic_spdy_client_base.cc
+++ b/quic/tools/quic_spdy_client_base.cc
@@ -180,9 +180,8 @@
return nullptr;
}
if (VersionHasIetfQuicFrames(client_session()->transport_version())) {
- // Process MAX_STREAMS from peer.
- while (!client_session()->CanOpenNextOutgoingBidirectionalStream() &&
- !client_session()->liveness_testing_in_progress()) {
+ // Process MAX_STREAMS from peer or wait for liveness testing succeeds.
+ while (!client_session()->CanOpenNextOutgoingBidirectionalStream()) {
network_helper()->RunEventLoop();
}
}