| Index: net/quic/core/quic_connection.cc
|
| diff --git a/net/quic/core/quic_connection.cc b/net/quic/core/quic_connection.cc
|
| index 890faaf662acca5e6c516b41b7e82b5a2814b9e0..dc3cc3d576efdb02d9c69413bfebdcb12d88c64c 100644
|
| --- a/net/quic/core/quic_connection.cc
|
| +++ b/net/quic/core/quic_connection.cc
|
| @@ -1665,6 +1665,18 @@ bool QuicConnection::WritePacket(SerializedPacket* packet) {
|
| }
|
| if (packet->transmission_type == NOT_RETRANSMISSION) {
|
| time_of_last_sent_new_packet_ = packet_send_time;
|
| + if (!FLAGS_quic_better_last_send_for_timeout) {
|
| + if (IsRetransmittable(*packet) == HAS_RETRANSMITTABLE_DATA &&
|
| + last_send_for_timeout_ <= time_of_last_received_packet_) {
|
| + last_send_for_timeout_ = packet_send_time;
|
| + }
|
| + }
|
| + }
|
| + if (FLAGS_quic_better_last_send_for_timeout) {
|
| + // Only adjust the last sent time (for the purpose of tracking the idle
|
| + // timeout) if this is the first retransmittable packet sent after a
|
| + // packet is received. If it were updated on every sent packet, then
|
| + // sending into a black hole might never timeout.
|
| if (IsRetransmittable(*packet) == HAS_RETRANSMITTABLE_DATA &&
|
| last_send_for_timeout_ <= time_of_last_received_packet_) {
|
| last_send_for_timeout_ = packet_send_time;
|
| @@ -2207,6 +2219,10 @@ void QuicConnection::CheckForTimeout() {
|
| void QuicConnection::SetTimeoutAlarm() {
|
| QuicTime time_of_last_packet =
|
| max(time_of_last_received_packet_, time_of_last_sent_new_packet_);
|
| + if (FLAGS_quic_better_last_send_for_timeout) {
|
| + time_of_last_packet =
|
| + max(time_of_last_received_packet_, last_send_for_timeout_);
|
| + }
|
|
|
| QuicTime deadline = time_of_last_packet + idle_network_timeout_;
|
| if (!handshake_timeout_.IsInfinite()) {
|
|
|