Bug 1382928 - Make CheckResponsivenessEvent::mStop an atomic. r?njn
MozReview-Commit-ID: 21sAXSrEi01
--- a/tools/profiler/gecko/ThreadResponsiveness.cpp
+++ b/tools/profiler/gecko/ThreadResponsiveness.cpp
@@ -49,21 +49,21 @@ public:
if (NS_SUCCEEDED(rv)) {
mHasEverBeenSuccessfullyDispatched = true;
}
}
// Can only run on the main thread.
NS_IMETHOD Run() override
{
- MutexAutoLock mon(mMutex);
- if (mStop)
+ if (mStop) {
return NS_OK;
+ }
- // This is raced on because we might pause the thread here
+ // mLastTracerTime is raced on because we might pause the thread here
// for profiling so if we tried to use a monitor to protect
// mLastTracerTime we could deadlock. We're risking seeing
// a partial write which will show up as an outlier in our
// performance data.
mLastTracerTime = TimeStamp::Now();
if (!mTimer) {
mTimer = do_CreateInstance("@mozilla.org/timer;1");
}
@@ -74,32 +74,31 @@ public:
NS_IMETHOD Notify(nsITimer* aTimer) final
{
NS_DispatchToMainThread(this);
return NS_OK;
}
void Terminate() {
- MutexAutoLock mon(mMutex);
mStop = true;
}
const TimeStamp& GetLastTracerTime() const {
return mLastTracerTime;
}
NS_DECL_ISUPPORTS_INHERITED
private:
TimeStamp mLastTracerTime;
Mutex mMutex;
nsCOMPtr<nsITimer> mTimer;
bool mHasEverBeenSuccessfullyDispatched; // only accessed on the "update" thread
- bool mStop;
+ Atomic<bool> mStop;
};
NS_IMPL_ISUPPORTS_INHERITED(CheckResponsivenessTask, mozilla::Runnable,
nsITimerCallback)
ThreadResponsiveness::ThreadResponsiveness()
: mActiveTracerEvent(new CheckResponsivenessTask())
{