Bug 1296531 - Notify MSG track listeners of removal during shutdown. r?jesup draft
authorAndreas Pehrson <pehrsons@gmail.com>
Thu, 23 Feb 2017 11:08:57 +0100
changeset 670292 b09e4864c58c1b274da66995d9102c586ca5a699
parent 670291 9abe52bf8588fdd3c420664c7963474740f31461
child 670293 00f3560b619b053cbd3421cd7e93c6ec7bc4f8ab
push id81598
push userbmo:apehrson@mozilla.com
push dateTue, 26 Sep 2017 09:13:19 +0000
reviewersjesup
bugs1296531
milestone58.0a1
Bug 1296531 - Notify MSG track listeners of removal during shutdown. r?jesup MozReview-Commit-ID: BnWrUUvE5qk
dom/media/MediaStreamGraph.cpp
--- a/dom/media/MediaStreamGraph.cpp
+++ b/dom/media/MediaStreamGraph.cpp
@@ -2475,16 +2475,22 @@ MediaStream::RemoveTrackListener(MediaSt
   public:
     Message(MediaStream* aStream, MediaStreamTrackListener* aListener,
             TrackID aTrackID) :
       ControlMessage(aStream), mListener(aListener), mTrackID(aTrackID) {}
     void Run() override
     {
       mStream->RemoveTrackListenerImpl(mListener, mTrackID);
     }
+    void RunDuringShutdown() override
+    {
+      // During shutdown we still want the listener's NotifyRemoved to be
+      // called, since not doing that might block shutdown of other modules.
+      Run();
+    }
     RefPtr<MediaStreamTrackListener> mListener;
     TrackID mTrackID;
   };
   GraphImpl()->AppendMessage(MakeUnique<Message>(this, aListener, aTrackID));
 }
 
 void
 MediaStream::AddDirectTrackListenerImpl(already_AddRefed<DirectMediaStreamTrackListener> aListener,
@@ -2531,16 +2537,23 @@ MediaStream::RemoveDirectTrackListener(D
   public:
     Message(MediaStream* aStream, DirectMediaStreamTrackListener* aListener,
             TrackID aTrackID) :
       ControlMessage(aStream), mListener(aListener), mTrackID(aTrackID) {}
     void Run() override
     {
       mStream->RemoveDirectTrackListenerImpl(mListener, mTrackID);
     }
+    void RunDuringShutdown() override
+    {
+      // During shutdown we still want the listener's
+      // NotifyDirectListenerUninstalled to be called, since not doing that
+      // might block shutdown of other modules.
+      Run();
+    }
     RefPtr<DirectMediaStreamTrackListener> mListener;
     TrackID mTrackID;
   };
   GraphImpl()->AppendMessage(MakeUnique<Message>(this, aListener, aTrackID));
 }
 
 void
 MediaStream::RunAfterPendingUpdates(already_AddRefed<nsIRunnable> aRunnable)