Loading netwerk/dns/nsDNSService2.cpp +15 −4 Original line number Diff line number Diff line Loading @@ -666,11 +666,15 @@ NS_IMPL_ISUPPORTS(DNSServiceWrapper, nsIDNSService, nsPIDNSService) already_AddRefed<nsIDNSService> DNSServiceWrapper::GetSingleton() { if (!gDNSServiceWrapper) { gDNSServiceWrapper = new DNSServiceWrapper(); // Not strictly needed, but simple and avoids bypassing lock-checking MutexAutoLock lock(gDNSServiceWrapper->mLock); gDNSServiceWrapper->mDNSServiceInUse = ChildDNSService::GetSingleton(); if (gDNSServiceWrapper->mDNSServiceInUse) { ClearOnShutdown(&gDNSServiceWrapper); nsDNSPrefetch::Initialize(gDNSServiceWrapper); } else { MutexAutoUnlock unlock( gDNSServiceWrapper->mLock); // don't destroy with held lock gDNSServiceWrapper = nullptr; } } Loading Loading @@ -716,6 +720,7 @@ NS_IMPL_ISUPPORTS_INHERITED(nsDNSService, DNSServiceBase, nsIDNSService, static StaticRefPtr<nsDNSService> gDNSService; static Atomic<bool> gInited(false); // Note: be careful of races! Called from multiple threads already_AddRefed<nsIDNSService> GetOrInitDNSService() { if (gInited) { return nsDNSService::GetXPCOMSingleton(); Loading Loading @@ -811,6 +816,7 @@ void nsDNSService::ReadPrefs(const char* name) { } } if (!name || !strcmp(name, kPrefIPv4OnlyDomains)) { MutexAutoLock lock(mLock); Preferences::GetCString(kPrefIPv4OnlyDomains, mIPv4OnlyDomains); } if (!name || !strcmp(name, kPrefDnsLocalDomains)) { Loading Loading @@ -845,7 +851,6 @@ void nsDNSService::ReadPrefs(const char* name) { NS_IMETHODIMP nsDNSService::Init() { MOZ_ASSERT(!mResolver); MOZ_ASSERT(NS_IsMainThread()); ReadPrefs(nullptr); Loading @@ -863,6 +868,7 @@ nsDNSService::Init() { if (NS_SUCCEEDED(rv)) { // now, set all of our member variables while holding the lock MutexAutoLock lock(mLock); MOZ_ASSERT(!mResolver); mResolver = res; } Loading @@ -888,7 +894,12 @@ nsDNSService::Init() { do_GetService("@mozilla.org/network/oblivious-http-service;1")); mTrrService = new TRRService(); if (NS_FAILED(mTrrService->Init(mResolver->IsNativeHTTPSEnabled()))) { bool httpsEnabled; { MutexAutoLock lock(mLock); httpsEnabled = mResolver->IsNativeHTTPSEnabled(); } if (NS_FAILED(mTrrService->Init(httpsEnabled))) { mTrrService = nullptr; } Loading Loading @@ -1523,14 +1534,14 @@ nsresult nsDNSService::GetTRRDomainKey(nsACString& aTRRDomain) { return NS_OK; } size_t nsDNSService::SizeOfIncludingThis( mozilla::MallocSizeOf mallocSizeOf) const { size_t nsDNSService::SizeOfIncludingThis(mozilla::MallocSizeOf mallocSizeOf) { // Measurement of the following members may be added later if DMD finds it // is worthwhile: // - mIDN // - mLock size_t n = mallocSizeOf(this); MutexAutoLock lock(mLock); n += mResolver ? mResolver->SizeOfIncludingThis(mallocSizeOf) : 0; n += mIPv4OnlyDomains.SizeOfExcludingThisIfUnshared(mallocSizeOf); n += mLocalDomains.SizeOfExcludingThis(mallocSizeOf); Loading netwerk/dns/nsDNSService2.h +11 −10 Original line number Diff line number Diff line Loading @@ -18,7 +18,6 @@ #include "nsHashKeys.h" #include "mozilla/Atomics.h" #include "mozilla/Mutex.h" #include "mozilla/Attributes.h" #include "TRRService.h" class nsAuthSSPI; Loading @@ -40,7 +39,7 @@ class DNSServiceWrapper final : public nsPIDNSService { nsPIDNSService* PIDNSService(); mozilla::Mutex mLock{"DNSServiceWrapper.mLock"}; nsCOMPtr<nsIDNSService> mDNSServiceInUse; nsCOMPtr<nsIDNSService> mDNSServiceInUse MOZ_GUARDED_BY(mLock); nsCOMPtr<nsIDNSService> mBackupDNSService; }; Loading @@ -58,7 +57,7 @@ class nsDNSService final : public mozilla::net::DNSServiceBase, static already_AddRefed<nsIDNSService> GetXPCOMSingleton(); size_t SizeOfIncludingThis(mozilla::MallocSizeOf mallocSizeOf) const; size_t SizeOfIncludingThis(mozilla::MallocSizeOf mallocSizeOf); bool GetOffline() const; Loading @@ -83,7 +82,7 @@ class nsDNSService final : public mozilla::net::DNSServiceBase, nsresult PreprocessHostname(bool aLocalDomain, const nsACString& aInput, nsACString& aACE); bool IsLocalDomain(const nsACString& aHostname) const; bool IsLocalDomain(const nsACString& aHostname) const MOZ_REQUIRES(mLock); nsresult AsyncResolveInternal( const nsACString& aHostname, uint16_t type, nsIDNSService::DNSFlags flags, Loading @@ -106,25 +105,27 @@ class nsDNSService final : public mozilla::net::DNSServiceBase, // Locks the mutex and returns an addreffed resolver. May return null. already_AddRefed<nsHostResolver> GetResolverLocked(); RefPtr<nsHostResolver> mResolver; RefPtr<nsHostResolver> mResolver MOZ_GUARDED_BY(mLock); // mLock protects access to mResolver, mLocalDomains, mIPv4OnlyDomains, // mFailedSVCDomainNames, and mMockHTTPSRRDomain. mozilla::Mutex mLock MOZ_UNANNOTATED{"nsDNSServer.mLock"}; mozilla::Mutex mLock{"nsDNSServer.mLock"}; // mIPv4OnlyDomains is a comma-separated list of domains for which only // IPv4 DNS lookups are performed. This allows the user to disable IPv6 on // a per-domain basis and work around broken DNS servers. See bug 68796. nsCString mIPv4OnlyDomains; nsCString mIPv4OnlyDomains MOZ_GUARDED_BY(mLock); nsCString mForceResolve; nsCString mMockHTTPSRRDomain; nsCString mMockHTTPSRRDomain MOZ_GUARDED_BY(mLock); mozilla::Atomic<bool, mozilla::Relaxed> mHasMockHTTPSRRDomainSet{false}; bool mNotifyResolution = false; bool mForceResolveOn = false; nsTHashSet<nsCString> mLocalDomains; nsTHashSet<nsCString> mLocalDomains MOZ_GUARDED_BY(mLock); RefPtr<mozilla::net::TRRService> mTrrService; nsClassHashtable<nsCStringHashKey, nsTArray<nsCString>> mFailedSVCDomainNames; nsClassHashtable<nsCStringHashKey, nsTArray<nsCString>> mFailedSVCDomainNames MOZ_GUARDED_BY(mLock); ; }; already_AddRefed<nsIDNSService> GetOrInitDNSService(); Loading Loading
netwerk/dns/nsDNSService2.cpp +15 −4 Original line number Diff line number Diff line Loading @@ -666,11 +666,15 @@ NS_IMPL_ISUPPORTS(DNSServiceWrapper, nsIDNSService, nsPIDNSService) already_AddRefed<nsIDNSService> DNSServiceWrapper::GetSingleton() { if (!gDNSServiceWrapper) { gDNSServiceWrapper = new DNSServiceWrapper(); // Not strictly needed, but simple and avoids bypassing lock-checking MutexAutoLock lock(gDNSServiceWrapper->mLock); gDNSServiceWrapper->mDNSServiceInUse = ChildDNSService::GetSingleton(); if (gDNSServiceWrapper->mDNSServiceInUse) { ClearOnShutdown(&gDNSServiceWrapper); nsDNSPrefetch::Initialize(gDNSServiceWrapper); } else { MutexAutoUnlock unlock( gDNSServiceWrapper->mLock); // don't destroy with held lock gDNSServiceWrapper = nullptr; } } Loading Loading @@ -716,6 +720,7 @@ NS_IMPL_ISUPPORTS_INHERITED(nsDNSService, DNSServiceBase, nsIDNSService, static StaticRefPtr<nsDNSService> gDNSService; static Atomic<bool> gInited(false); // Note: be careful of races! Called from multiple threads already_AddRefed<nsIDNSService> GetOrInitDNSService() { if (gInited) { return nsDNSService::GetXPCOMSingleton(); Loading Loading @@ -811,6 +816,7 @@ void nsDNSService::ReadPrefs(const char* name) { } } if (!name || !strcmp(name, kPrefIPv4OnlyDomains)) { MutexAutoLock lock(mLock); Preferences::GetCString(kPrefIPv4OnlyDomains, mIPv4OnlyDomains); } if (!name || !strcmp(name, kPrefDnsLocalDomains)) { Loading Loading @@ -845,7 +851,6 @@ void nsDNSService::ReadPrefs(const char* name) { NS_IMETHODIMP nsDNSService::Init() { MOZ_ASSERT(!mResolver); MOZ_ASSERT(NS_IsMainThread()); ReadPrefs(nullptr); Loading @@ -863,6 +868,7 @@ nsDNSService::Init() { if (NS_SUCCEEDED(rv)) { // now, set all of our member variables while holding the lock MutexAutoLock lock(mLock); MOZ_ASSERT(!mResolver); mResolver = res; } Loading @@ -888,7 +894,12 @@ nsDNSService::Init() { do_GetService("@mozilla.org/network/oblivious-http-service;1")); mTrrService = new TRRService(); if (NS_FAILED(mTrrService->Init(mResolver->IsNativeHTTPSEnabled()))) { bool httpsEnabled; { MutexAutoLock lock(mLock); httpsEnabled = mResolver->IsNativeHTTPSEnabled(); } if (NS_FAILED(mTrrService->Init(httpsEnabled))) { mTrrService = nullptr; } Loading Loading @@ -1523,14 +1534,14 @@ nsresult nsDNSService::GetTRRDomainKey(nsACString& aTRRDomain) { return NS_OK; } size_t nsDNSService::SizeOfIncludingThis( mozilla::MallocSizeOf mallocSizeOf) const { size_t nsDNSService::SizeOfIncludingThis(mozilla::MallocSizeOf mallocSizeOf) { // Measurement of the following members may be added later if DMD finds it // is worthwhile: // - mIDN // - mLock size_t n = mallocSizeOf(this); MutexAutoLock lock(mLock); n += mResolver ? mResolver->SizeOfIncludingThis(mallocSizeOf) : 0; n += mIPv4OnlyDomains.SizeOfExcludingThisIfUnshared(mallocSizeOf); n += mLocalDomains.SizeOfExcludingThis(mallocSizeOf); Loading
netwerk/dns/nsDNSService2.h +11 −10 Original line number Diff line number Diff line Loading @@ -18,7 +18,6 @@ #include "nsHashKeys.h" #include "mozilla/Atomics.h" #include "mozilla/Mutex.h" #include "mozilla/Attributes.h" #include "TRRService.h" class nsAuthSSPI; Loading @@ -40,7 +39,7 @@ class DNSServiceWrapper final : public nsPIDNSService { nsPIDNSService* PIDNSService(); mozilla::Mutex mLock{"DNSServiceWrapper.mLock"}; nsCOMPtr<nsIDNSService> mDNSServiceInUse; nsCOMPtr<nsIDNSService> mDNSServiceInUse MOZ_GUARDED_BY(mLock); nsCOMPtr<nsIDNSService> mBackupDNSService; }; Loading @@ -58,7 +57,7 @@ class nsDNSService final : public mozilla::net::DNSServiceBase, static already_AddRefed<nsIDNSService> GetXPCOMSingleton(); size_t SizeOfIncludingThis(mozilla::MallocSizeOf mallocSizeOf) const; size_t SizeOfIncludingThis(mozilla::MallocSizeOf mallocSizeOf); bool GetOffline() const; Loading @@ -83,7 +82,7 @@ class nsDNSService final : public mozilla::net::DNSServiceBase, nsresult PreprocessHostname(bool aLocalDomain, const nsACString& aInput, nsACString& aACE); bool IsLocalDomain(const nsACString& aHostname) const; bool IsLocalDomain(const nsACString& aHostname) const MOZ_REQUIRES(mLock); nsresult AsyncResolveInternal( const nsACString& aHostname, uint16_t type, nsIDNSService::DNSFlags flags, Loading @@ -106,25 +105,27 @@ class nsDNSService final : public mozilla::net::DNSServiceBase, // Locks the mutex and returns an addreffed resolver. May return null. already_AddRefed<nsHostResolver> GetResolverLocked(); RefPtr<nsHostResolver> mResolver; RefPtr<nsHostResolver> mResolver MOZ_GUARDED_BY(mLock); // mLock protects access to mResolver, mLocalDomains, mIPv4OnlyDomains, // mFailedSVCDomainNames, and mMockHTTPSRRDomain. mozilla::Mutex mLock MOZ_UNANNOTATED{"nsDNSServer.mLock"}; mozilla::Mutex mLock{"nsDNSServer.mLock"}; // mIPv4OnlyDomains is a comma-separated list of domains for which only // IPv4 DNS lookups are performed. This allows the user to disable IPv6 on // a per-domain basis and work around broken DNS servers. See bug 68796. nsCString mIPv4OnlyDomains; nsCString mIPv4OnlyDomains MOZ_GUARDED_BY(mLock); nsCString mForceResolve; nsCString mMockHTTPSRRDomain; nsCString mMockHTTPSRRDomain MOZ_GUARDED_BY(mLock); mozilla::Atomic<bool, mozilla::Relaxed> mHasMockHTTPSRRDomainSet{false}; bool mNotifyResolution = false; bool mForceResolveOn = false; nsTHashSet<nsCString> mLocalDomains; nsTHashSet<nsCString> mLocalDomains MOZ_GUARDED_BY(mLock); RefPtr<mozilla::net::TRRService> mTrrService; nsClassHashtable<nsCStringHashKey, nsTArray<nsCString>> mFailedSVCDomainNames; nsClassHashtable<nsCStringHashKey, nsTArray<nsCString>> mFailedSVCDomainNames MOZ_GUARDED_BY(mLock); ; }; already_AddRefed<nsIDNSService> GetOrInitDNSService(); Loading