Use mutex in PACResolver when accessing mRequest from multiple threads.

This commit is contained in:
Valentin Gosu 2019-12-06 13:01:55 +01:00 • committed by Roy Tam
commit 38439fd244

View file

@ -271,6 +271,7 @@ public:
PACResolver() PACResolver()
: mStatus(NS_ERROR_FAILURE) : mStatus(NS_ERROR_FAILURE)
, mMutex("PACResolver::Mutex")
{ {
} }
@ -279,9 +280,15 @@ public:
nsIDNSRecord *record, nsIDNSRecord *record,
nsresult status) override nsresult status) override
{ {
if (mTimer) { nsCOMPtr<nsITimer> timer;
mTimer->Cancel(); {
mTimer = nullptr; MutexAutoLock lock(mMutex);
timer.swap(mTimer);
mRequest = nullptr;
}
if (timer) {
timer->Cancel();
} }
mRequest = nullptr; mRequest = nullptr;
@ -293,9 +300,15 @@ public:
// nsITimerCallback // nsITimerCallback
NS_IMETHOD Notify(nsITimer *timer) override NS_IMETHOD Notify(nsITimer *timer) override
{ {
if (mRequest) nsCOMPtr<nsICancelable> request;
mRequest->Cancel(NS_ERROR_NET_TIMEOUT); {
mTimer = nullptr; MutexAutoLock lock(mMutex);
request.swap(mRequest);
mTimer = nullptr;
}
if (request) {
request->Cancel(NS_ERROR_NET_TIMEOUT);
}
return NS_OK; return NS_OK;
} }
@ -303,6 +316,7 @@ public:
nsCOMPtr<nsICancelable> mRequest; nsCOMPtr<nsICancelable> mRequest;
nsCOMPtr<nsIDNSRecord> mResponse; nsCOMPtr<nsIDNSRecord> mResponse;
nsCOMPtr<nsITimer> mTimer; nsCOMPtr<nsITimer> mTimer;
Mutex mMutex;
private: private:
~PACResolver() {} ~PACResolver() {}