Bug 1424066 - Use RefPtr to hold nsHostResolver in nsHostResolver::ThreadFunc r=mayhemer
MozReview-Commit-ID: CmKWJIq1SNy
--- a/netwerk/dns/nsHostResolver.cpp
+++ b/netwerk/dns/nsHostResolver.cpp
@@ -1468,17 +1468,17 @@ nsHostResolver::ThreadFunc(void *arg)
nsCString name = naming.GetNextThreadName("DNS Resolver");
AUTO_PROFILER_REGISTER_THREAD(name.BeginReading());
NS_SetCurrentThreadName(name.BeginReading());
#if defined(RES_RETRY_ON_FAILURE)
nsResState rs;
#endif
- nsHostResolver *resolver = (nsHostResolver *)arg;
+ RefPtr<nsHostResolver> resolver = dont_AddRef((nsHostResolver *)arg);
nsHostRecord *rec = nullptr;
AddrInfo *ai = nullptr;
while (rec || resolver->GetHostToLookup(&rec)) {
LOG(("DNS lookup thread - Calling getaddrinfo for host [%s%s%s].\n",
LOG_HOST(rec->host, rec->netInterface)));
TimeStamp startTime = TimeStamp::Now();
@@ -1532,17 +1532,17 @@ nsHostResolver::ThreadFunc(void *arg)
// leave 'rec' assigned and loop to make a renewed host resolve
LOG(("DNS lookup thread - Re-resolving host [%s%s%s].\n",
LOG_HOST(rec->host, rec->netInterface)));
} else {
rec = nullptr;
}
}
resolver->mThreadCount--;
- NS_RELEASE(resolver);
+ resolver = nullptr;
LOG(("DNS lookup thread - queue empty, thread finished.\n"));
}
nsresult
nsHostResolver::Create(uint32_t maxCacheEntries,
uint32_t defaultCacheEntryLifetime,
uint32_t defaultGracePeriod,
nsHostResolver **result)