diff --git a/netwerk/dns/PlatformDNSUnix.cpp b/netwerk/dns/PlatformDNSUnix.cpp index 0acf4d024a6d..c104146a42eb 100644 --- a/netwerk/dns/PlatformDNSUnix.cpp +++ b/netwerk/dns/PlatformDNSUnix.cpp @@ -9,6 +9,7 @@ #include "mozilla/net/DNSPacket.h" #include "nsIDNSService.h" #include "mozilla/Maybe.h" +#include "mozilla/Mutex.h" #include "mozilla/StaticPrefs_network.h" #include "mozilla/ThreadLocal.h" @@ -22,6 +23,7 @@ namespace mozilla::net { #if defined(HAVE_RES_NINIT) MOZ_THREAD_LOCAL(struct __res_state*) sThreadRes; +mozilla::StaticMutex sMutex MOZ_UNANNOTATED; #endif #define LOG(msg, ...) \ @@ -44,9 +46,12 @@ nsresult ResolveHTTPSRecordImpl(const nsACString& aHost, if (!sThreadRes.get()) { UniquePtr resState(new struct __res_state); memset(resState.get(), 0, sizeof(struct __res_state)); - if (int ret = res_ninit(resState.get())) { - LOG("res_ninit failed: %d", ret); - return NS_ERROR_UNKNOWN_HOST; + { + StaticMutexAutoLock lock(sMutex); + if (int ret = res_ninit(resState.get())) { + LOG("res_ninit failed: %d", ret); + return NS_ERROR_UNKNOWN_HOST; + } } sThreadRes.set(resState.release()); } @@ -90,7 +95,10 @@ void DNSThreadShutdown() { } sThreadRes.set(nullptr); - res_nclose(res); + { + StaticMutexAutoLock lock(sMutex); + res_nclose(res); + } free(res); #endif }