From f2565dab541a50e0f2871e6c7a5ff1e60cfe54d7 Mon Sep 17 00:00:00 2001 From: Bryce Van Dyk Date: Wed, 18 Apr 2018 15:30:57 -0400 Subject: [PATCH] Bug 1453127 - Do not use iterators in MediaStreamTrack when removing listeners. r=pehrsons a=lizzard --HG-- extra : source : 6b3aaee40f7507e240da08d6e073cff3c53971f4 extra : intermediate-source : 59e50af7afe19f827dd687ea097d5ba551ab0b1d --- dom/media/MediaStreamTrack.cpp | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/dom/media/MediaStreamTrack.cpp b/dom/media/MediaStreamTrack.cpp index 8ccdeb90ce..75cdeb1d16 100644 --- a/dom/media/MediaStreamTrack.cpp +++ b/dom/media/MediaStreamTrack.cpp @@ -165,11 +165,15 @@ MediaStreamTrack::Destroy() mPrincipalHandleListener->Forget(); mPrincipalHandleListener = nullptr; } - for (auto l : mTrackListeners) { - RemoveListener(l); + // Remove all listeners -- avoid iterating over the list we're removing from + const nsTArray> trackListeners(mTrackListeners); + for (auto listener : trackListeners) { + RemoveListener(listener); } - for (auto l : mDirectTrackListeners) { - RemoveDirectListener(l); + // Do the same as above for direct listeners + const nsTArray> directTrackListeners(mDirectTrackListeners); + for (auto listener : directTrackListeners) { + RemoveDirectListener(listener); } }