diff options
Diffstat (limited to 'net/base/dnsrr_resolver.cc')
-rw-r--r-- | net/base/dnsrr_resolver.cc | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/net/base/dnsrr_resolver.cc b/net/base/dnsrr_resolver.cc index e0d43d9..2cfb0cf 100644 --- a/net/base/dnsrr_resolver.cc +++ b/net/base/dnsrr_resolver.cc @@ -20,7 +20,7 @@ #include "base/synchronization/lock.h" #include "base/task.h" #include "base/threading/worker_pool.h" -#include "net/base/dns_reloader.h" +#include "net/base/dns_reload_timer.h" #include "net/base/dns_util.h" #include "net/base/net_errors.h" @@ -184,18 +184,26 @@ class RRResolverWorker { } bool r = true; -#if defined(OS_MACOSX) || defined(OS_OPENBSD) if ((_res.options & RES_INIT) == 0) { if (res_ninit(&_res) != 0) r = false; } -#else - DnsReloaderMaybeReload(); -#endif if (r) { unsigned long saved_options = _res.options; r = Do(); + +#if defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_OPENBSD) + if (!r && DnsReloadTimerHasExpired()) { + // When there's no network connection, _res may not be initialized by + // getaddrinfo. Therefore, we call res_nclose only when there are ns + // entries. + if (_res.nscount > 0) + res_nclose(&_res); + if (res_ninit(&_res) == 0) + r = Do(); + } +#endif _res.options = saved_options; } |