Bug 1382928 - Make CheckResponsivenessEvent::mStop an atomic. r?njn draft
authorMarkus Stange <mstange@themasta.com>
Fri, 21 Jul 2017 17:57:38 -0400
changeset 613419 389c48c7e4cd3d42419cc0cfa2b680a612e24510
parent 613418 80e65bc85c579cd619b4baf1ede22479a8aa8572
child 638668 fb64c92b76bd7f27af5eecda43faa046fc0bf917
push id69790
push userbmo:mstange@themasta.com
push dateFri, 21 Jul 2017 21:58:36 +0000
reviewersnjn
bugs1382928
milestone56.0a1
Bug 1382928 - Make CheckResponsivenessEvent::mStop an atomic. r?njn MozReview-Commit-ID: 21sAXSrEi01
tools/profiler/gecko/ThreadResponsiveness.cpp
--- 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())
 {