Bug 1258144: Don't start a thread for SystemClockDriver if already started r?padenot draft
authorRandell Jesup <rjesup@jesup.org>
Sun, 20 Mar 2016 01:00:48 -0400
changeset 342645 7e1b4495c785d9643a2a3e6689726d6f9a958f76
parent 342644 053873b9c75980ce3189d44489e780f93794c599
child 516595 5d9907a930df3ac5a6b36644421451b3f05ec099
push id13430
push userrjesup@wgate.com
push dateSun, 20 Mar 2016 05:01:22 +0000
reviewerspadenot
bugs1258144
milestone46.0
Bug 1258144: Don't start a thread for SystemClockDriver if already started r?padenot The only way I can conceive that this assertion could fire is if something called driver->Start() on this driver either before or after we forced it to start for shutdown. In any case, if we've called Start for the driver already, calling it again shouldn't do anything. MozReview-Commit-ID: gee67lJAR
dom/media/GraphDriver.cpp
--- a/dom/media/GraphDriver.cpp
+++ b/dom/media/GraphDriver.cpp
@@ -219,21 +219,24 @@ public:
 private:
   ThreadedDriver* mDriver;
 };
 
 void
 ThreadedDriver::Start()
 {
   LIFECYCLE_LOG("Starting thread for a SystemClockDriver  %p\n", mGraphImpl);
-  nsCOMPtr<nsIRunnable> event = new MediaStreamGraphInitThreadRunnable(this);
-  // Note: mThread may be null during event->Run() if we pass to NewNamedThread!  See AudioInitTask
-  nsresult rv = NS_NewNamedThread("MediaStreamGrph", getter_AddRefs(mThread));
-  if (NS_SUCCEEDED(rv)) {
-    mThread->Dispatch(event, NS_DISPATCH_NORMAL);
+  NS_WARN_IF(!mThread);
+  if (!mThread) { // Ensure we haven't already started it
+    nsCOMPtr<nsIRunnable> event = new MediaStreamGraphInitThreadRunnable(this);
+    // Note: mThread may be null during event->Run() if we pass to NewNamedThread!  See AudioInitTask
+    nsresult rv = NS_NewNamedThread("MediaStreamGrph", getter_AddRefs(mThread));
+    if (NS_SUCCEEDED(rv)) {
+      mThread->Dispatch(event, NS_DISPATCH_NORMAL);
+    }
   }
 }
 
 void
 ThreadedDriver::Resume()
 {
   Start();
 }