Index: net/dns/dns_config_service_win.cc |
diff --git a/net/dns/dns_config_service_win.cc b/net/dns/dns_config_service_win.cc |
index a8d4ddb80ad18dd89470629c2239356c8ecdcafa..54ef1c0d397fe2316df94e987235c34b89116698 100644 |
--- a/net/dns/dns_config_service_win.cc |
+++ b/net/dns/dns_config_service_win.cc |
@@ -38,6 +38,9 @@ namespace internal { |
namespace { |
+// Interval between retries to parse config. Used only until parsing succeeds. |
+const int kRetryIntervalSeconds = 5; |
+ |
const wchar_t* const kPrimaryDnsSuffixPath = |
L"SOFTWARE\\Policies\\Microsoft\\System\\DNSClient"; |
@@ -479,11 +482,16 @@ class DnsConfigServiceWin::ConfigReader : public SerialWorker { |
service_->OnConfigRead(dns_config_); |
} else { |
LOG(WARNING) << "Failed to read DnsConfig."; |
+ // Try again in a while in case DnsConfigWatcher missed the signal. |
+ MessageLoop::current()->PostDelayedTask( |
+ FROM_HERE, |
+ base::Bind(&ConfigReader::WorkNow, this), |
+ base::TimeDelta::FromSeconds(kRetryIntervalSeconds)); |
} |
} |
DnsConfigServiceWin* service_; |
- // Written in DoRead(), read in OnReadFinished(). No locking required. |
+ // Written in DoWork(), read in OnWorkFinished(). No locking required. |
DnsConfig dns_config_; |
bool success_; |
}; |