Index: net/quic/chromium/quic_stream_factory.cc |
diff --git a/net/quic/chromium/quic_stream_factory.cc b/net/quic/chromium/quic_stream_factory.cc |
index 37a59dd64d54f95d1b8012f486053076412589b5..05d5cd4aa4cb7c607db2303136bc996e583e1207 100644 |
--- a/net/quic/chromium/quic_stream_factory.cc |
+++ b/net/quic/chromium/quic_stream_factory.cc |
@@ -737,6 +737,7 @@ QuicStreamFactory::QuicStreamFactory( |
bool close_sessions_on_ip_change, |
bool disable_quic_on_timeout_with_open_streams, |
int idle_connection_timeout_seconds, |
+ int reduced_ping_timeout_seconds, |
int packet_reader_yield_after_duration_milliseconds, |
bool migrate_sessions_on_network_change, |
bool migrate_sessions_early, |
@@ -788,6 +789,9 @@ QuicStreamFactory::QuicStreamFactory( |
threshold_public_resets_post_handshake), |
socket_receive_buffer_size_(socket_receive_buffer_size), |
delay_tcp_race_(delay_tcp_race), |
+ ping_timeout_(QuicTime::Delta::FromSeconds(kPingTimeoutSecs)), |
+ reduced_ping_timeout_( |
+ QuicTime::Delta::FromSeconds(reduced_ping_timeout_seconds)), |
yield_after_packets_(kQuicYieldAfterPacketsRead), |
yield_after_duration_(QuicTime::Delta::FromMilliseconds( |
packet_reader_yield_after_duration_milliseconds)), |
@@ -1370,6 +1374,13 @@ void QuicStreamFactory::OnSessionClosed(QuicChromiumClientSession* session) { |
all_sessions_.erase(session); |
} |
+void QuicStreamFactory::OnTimeoutWithOpenStreams() { |
+ // Reduce PING timeout when connection times out with open stream. |
+ if (ping_timeout_ > reduced_ping_timeout_) { |
+ ping_timeout_ = reduced_ping_timeout_; |
+ } |
+} |
+ |
void QuicStreamFactory::CancelRequest(QuicStreamRequest* request) { |
RequestMap::iterator request_it = active_requests_.find(request); |
DCHECK(request_it != active_requests_.end()); |
@@ -1792,6 +1803,7 @@ int QuicStreamFactory::CreateSession( |
QuicConnection* connection = new QuicConnection( |
connection_id, addr, helper_.get(), alarm_factory_.get(), writer, |
true /* owns_writer */, Perspective::IS_CLIENT, supported_versions_); |
+ connection->set_ping_timeout(ping_timeout_); |
connection->SetMaxPacketLength(max_packet_length_); |
QuicConfig config = config_; |