mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-21 01:05:45 +00:00
Bug 1585106 - Use mutex in PACResolver when accessing mRequest from multiple threads r=michal
Differential Revision: https://phabricator.services.mozilla.com/D52488 --HG-- extra : moz-landing-system : lando
This commit is contained in:
parent
fcca3f96b4
commit
9503c7faab
@ -299,17 +299,24 @@ class PACResolver final : public nsIDNSListener,
|
||||
NS_DECL_THREADSAFE_ISUPPORTS
|
||||
|
||||
explicit PACResolver(nsIEventTarget* aTarget)
|
||||
: mStatus(NS_ERROR_FAILURE), mMainThreadEventTarget(aTarget) {}
|
||||
: mStatus(NS_ERROR_FAILURE),
|
||||
mMainThreadEventTarget(aTarget),
|
||||
mMutex("PACResolver::Mutex") {}
|
||||
|
||||
// nsIDNSListener
|
||||
NS_IMETHOD OnLookupComplete(nsICancelable* request, nsIDNSRecord* record,
|
||||
nsresult status) override {
|
||||
if (mTimer) {
|
||||
mTimer->Cancel();
|
||||
mTimer = nullptr;
|
||||
nsCOMPtr<nsITimer> timer;
|
||||
{
|
||||
MutexAutoLock lock(mMutex);
|
||||
timer.swap(mTimer);
|
||||
mRequest = nullptr;
|
||||
}
|
||||
|
||||
if (timer) {
|
||||
timer->Cancel();
|
||||
}
|
||||
|
||||
mRequest = nullptr;
|
||||
mStatus = status;
|
||||
mResponse = record;
|
||||
return NS_OK;
|
||||
@ -323,9 +330,15 @@ class PACResolver final : public nsIDNSListener,
|
||||
|
||||
// nsITimerCallback
|
||||
NS_IMETHOD Notify(nsITimer* timer) override {
|
||||
nsCOMPtr<nsICancelable> request(mRequest);
|
||||
if (request) request->Cancel(NS_ERROR_NET_TIMEOUT);
|
||||
mTimer = nullptr;
|
||||
nsCOMPtr<nsICancelable> request;
|
||||
{
|
||||
MutexAutoLock lock(mMutex);
|
||||
request.swap(mRequest);
|
||||
mTimer = nullptr;
|
||||
}
|
||||
if (request) {
|
||||
request->Cancel(NS_ERROR_NET_TIMEOUT);
|
||||
}
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
@ -340,6 +353,7 @@ class PACResolver final : public nsIDNSListener,
|
||||
nsCOMPtr<nsIDNSRecord> mResponse;
|
||||
nsCOMPtr<nsITimer> mTimer;
|
||||
nsCOMPtr<nsIEventTarget> mMainThreadEventTarget;
|
||||
Mutex mMutex;
|
||||
|
||||
private:
|
||||
~PACResolver() = default;
|
||||
|
Loading…
Reference in New Issue
Block a user