Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(720)

Unified Diff: net/quic/quic_connection.cc

Issue 471313002: Add an Update method on QuicAlarm which contains a granularity. Also (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@Final_0814_2
Patch Set: Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: net/quic/quic_connection.cc
diff --git a/net/quic/quic_connection.cc b/net/quic/quic_connection.cc
index a4305f62c71bfd1de98ed44f2e7e8cd6c1f5c288..a928280bff17990d5cfe2207f1b19f47c119b0a8 100644
--- a/net/quic/quic_connection.cc
+++ b/net/quic/quic_connection.cc
@@ -569,12 +569,10 @@ void QuicConnection::ProcessAckFrame(const QuicAckFrame& incoming_ack) {
// Always reset the retransmission alarm when an ack comes in, since we now
// have a better estimate of the current rtt than when it was set.
- retransmission_alarm_->Cancel();
QuicTime retransmission_time =
sent_packet_manager_.GetRetransmissionTime();
- if (retransmission_time != QuicTime::Zero()) {
- retransmission_alarm_->Set(retransmission_time);
- }
+ retransmission_alarm_->Update(retransmission_time,
+ QuicTime::Delta::FromMilliseconds(1));
}
void QuicConnection::ProcessStopWaitingFrame(
@@ -1278,11 +1276,9 @@ void QuicConnection::RetransmitUnackedPackets(
void QuicConnection::NeuterUnencryptedPackets() {
sent_packet_manager_.NeuterUnencryptedPackets();
// This may have changed the retransmission timer, so re-arm it.
- retransmission_alarm_->Cancel();
QuicTime retransmission_time = sent_packet_manager_.GetRetransmissionTime();
- if (retransmission_time != QuicTime::Zero()) {
- retransmission_alarm_->Set(retransmission_time);
- }
+ retransmission_alarm_->Update(retransmission_time,
+ QuicTime::Delta::FromMilliseconds(1));
}
bool QuicConnection::ShouldGeneratePacket(
@@ -1304,20 +1300,21 @@ bool QuicConnection::CanWrite(HasRetransmittableData retransmittable) {
return false;
}
- send_alarm_->Cancel();
QuicTime now = clock_->Now();
QuicTime::Delta delay = sent_packet_manager_.TimeUntilSend(
now, retransmittable);
if (delay.IsInfinite()) {
+ send_alarm_->Cancel();
return false;
}
// If the scheduler requires a delay, then we can not send this packet now.
if (!delay.IsZero()) {
- send_alarm_->Set(now.Add(delay));
+ send_alarm_->Update(now.Add(delay), QuicTime::Delta::FromMilliseconds(1));
DVLOG(1) << "Delaying sending.";
return false;
}
+ send_alarm_->Cancel();
return true;
}
@@ -1511,11 +1508,9 @@ bool QuicConnection::OnPacketSent(WriteResult result) {
transmission_type, retransmittable);
if (reset_retransmission_alarm || !retransmission_alarm_->IsSet()) {
- retransmission_alarm_->Cancel();
QuicTime retransmission_time = sent_packet_manager_.GetRetransmissionTime();
- if (retransmission_time != QuicTime::Zero()) {
- retransmission_alarm_->Set(retransmission_time);
- }
+ retransmission_alarm_->Update(retransmission_time,
+ QuicTime::Delta::FromMilliseconds(1));
}
stats_.bytes_sent += result.bytes_written;
@@ -1632,7 +1627,7 @@ void QuicConnection::OnRetransmissionTimeout() {
// and nothing waiting to be sent.
if (!HasQueuedData() && !retransmission_alarm_->IsSet()) {
QuicTime rto_timeout = sent_packet_manager_.GetRetransmissionTime();
- if (rto_timeout != QuicTime::Zero()) {
+ if (rto_timeout.IsInitialized()) {
retransmission_alarm_->Set(rto_timeout);
}
}
@@ -1882,6 +1877,14 @@ bool QuicConnection::CanWriteStreamData() {
}
void QuicConnection::SetIdleNetworkTimeout(QuicTime::Delta timeout) {
+ // Adjust the idle timeout on client and server to prevent clients from
+ // sending requests to servers which have already closed the connection.
+ if (is_server_) {
+ timeout = timeout.Add(QuicTime::Delta::FromSeconds(1));
+ } else if (timeout > QuicTime::Delta::FromSeconds(1)) {
+ timeout = timeout.Subtract(QuicTime::Delta::FromSeconds(1));
+ }
+
if (timeout < idle_network_timeout_) {
idle_network_timeout_ = timeout;
CheckForTimeout();
@@ -1944,7 +1947,7 @@ bool QuicConnection::CheckForTimeout() {
}
timeout_alarm_->Cancel();
- timeout_alarm_->Set(clock_->ApproximateNow().Add(timeout));
+ timeout_alarm_->Set(now.Add(timeout));
return false;
}
@@ -1953,13 +1956,14 @@ void QuicConnection::SetPingAlarm() {
// Only clients send pings.
return;
}
- ping_alarm_->Cancel();
if (!visitor_->HasOpenDataStreams()) {
+ ping_alarm_->Cancel();
// Don't send a ping unless there are open streams.
return;
}
QuicTime::Delta ping_timeout = QuicTime::Delta::FromSeconds(kPingTimeoutSecs);
- ping_alarm_->Set(clock_->ApproximateNow().Add(ping_timeout));
+ ping_alarm_->Update(clock_->ApproximateNow().Add(ping_timeout),
+ QuicTime::Delta::FromSeconds(1));
}
QuicConnection::ScopedPacketBundler::ScopedPacketBundler(

Powered by Google App Engine
This is Rietveld 408576698