summaryrefslogtreecommitdiffstats
path: root/net/dns/dns_session.cc
diff options
context:
space:
mode:
authorszym@chromium.org <szym@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-02-26 02:55:33 +0000
committerszym@chromium.org <szym@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-02-26 02:55:33 +0000
commitd5f869a488437599c08a5027795a1045baa74452 (patch)
tree3d7b0f7dafdf4cb34891e6b3840f9ac5100d199a /net/dns/dns_session.cc
parentb5f5c45835ae1820a89180ee528e79da483ebbba (diff)
downloadchromium_src-d5f869a488437599c08a5027795a1045baa74452.zip
chromium_src-d5f869a488437599c08a5027795a1045baa74452.tar.gz
chromium_src-d5f869a488437599c08a5027795a1045baa74452.tar.bz2
[net/dns] Limit maximum timeout after backoff to 5s.
Intermittent network issues could result in timeouts in excess of 30s which puts HostResolverImpl in a virtually stalled state. This CL caps the maximum time spent waiting on a single DNS query to 5s, although resolving a hostname could still take long time due to suffix search and nameserver fallback. BUG=110197,177558 Review URL: https://chromiumcodereview.appspot.com/12330115 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@184567 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'net/dns/dns_session.cc')
-rw-r--r--net/dns/dns_session.cc4
1 files changed, 3 insertions, 1 deletions
diff --git a/net/dns/dns_session.cc b/net/dns/dns_session.cc
index 0b2e49b..56e0b2e 100644
--- a/net/dns/dns_session.cc
+++ b/net/dns/dns_session.cc
@@ -56,7 +56,9 @@ int DnsSession::NextFirstServerIndex() {
base::TimeDelta DnsSession::NextTimeout(int attempt) {
// The timeout doubles every full round (each nameserver once).
// TODO(szym): Adapt timeout to observed RTT. http://crbug.com/110197
- return config_.timeout * (1 << (attempt / config_.nameservers.size()));
+ const base::TimeDelta kMaxTimeout = base::TimeDelta::FromSeconds(5);
+ unsigned num_backoffs = attempt / config_.nameservers.size();
+ return std::min(config_.timeout * (1 << num_backoffs), kMaxTimeout);
}
// Allocate a socket, already connected to the server address.