Bug 1302612 - SourceMediaStream: Don't lock mMutex when disconnecting consumers. r?jesup
MozReview-Commit-ID: 7F4BXQbzUSx
--- 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)