Bug 1302612 - SourceMediaStream: Don't lock mMutex when disconnecting consumers. r?jesup draft
authorAndreas Pehrson <pehrsons@gmail.com>
Mon, 24 Oct 2016 07:46:21 +0200
changeset 428535 5dadfbeeae87734e5cfbe73eef906d7473c23856
parent 428476 215f9686117673a2c914ed207bc7da9bb8d741ad
child 534753 ff0c9f613769a65087e78733140b24ff8978b25e
push id33330
push userbmo:pehrson@telenordigital.com
push dateMon, 24 Oct 2016 06:11:12 +0000
reviewersjesup
bugs1302612
milestone52.0a1
Bug 1302612 - SourceMediaStream: Don't lock mMutex when disconnecting consumers. r?jesup MozReview-Commit-ID: 7F4BXQbzUSx
dom/media/MediaStreamGraph.cpp
--- a/dom/media/MediaStreamGraph.cpp
+++ b/dom/media/MediaStreamGraph.cpp
@@ -2646,16 +2646,23 @@ SourceMediaStream::CloseAudioInput()
   mInputListener = nullptr;
 }
 
 void
 SourceMediaStream::DestroyImpl()
 {
   CloseAudioInput();
 
+  GraphImpl()->AssertOnGraphThreadOrNotRunning();
+  for (int32_t i = mConsumers.Length() - 1; i >= 0; --i) {
+    // Disconnect before we come under mMutex's lock since it can call back
+    // through RemoveDirectTrackListenerImpl() and deadlock.
+    mConsumers[i]->Disconnect();
+  }
+
   // Hold mMutex while mGraph is reset so that other threads holding mMutex
   // can null-check know that the graph will not destroyed.
   MutexAutoLock lock(mMutex);
   MediaStream::DestroyImpl();
 }
 
 void
 SourceMediaStream::SetPullEnabled(bool aEnabled)