Bug 1258410: [MSE] P2. Disconnect init promise if any pending. r=gerald draft
authorJean-Yves Avenard <jyavenard@mozilla.com>
Wed, 23 Mar 2016 16:35:10 +1100
changeset 343788 59cd62da6cebb72c4b4d87eec829d9d5cd13989a
parent 343786 3cfa24b49225ca052d1910bb7f35eb238cc10aec
child 516832 ab3d32e34189fd237bd75eccea0d4e3883dbfe97
push id13688
push userbmo:jyavenard@mozilla.com
push dateWed, 23 Mar 2016 08:54:10 +0000
reviewersgerald
bugs1258410
milestone48.0a1
Bug 1258410: [MSE] P2. Disconnect init promise if any pending. r=gerald MozReview-Commit-ID: 9iOPqSeDzdH
dom/media/mediasource/TrackBuffersManager.cpp
--- a/dom/media/mediasource/TrackBuffersManager.cpp
+++ b/dom/media/mediasource/TrackBuffersManager.cpp
@@ -297,16 +297,23 @@ TrackBuffersManager::Detach()
 }
 
 void
 TrackBuffersManager::CompleteResetParserState()
 {
   MOZ_ASSERT(OnTaskQueue());
   MSE_DEBUG("");
 
+  // We shouldn't change mInputDemuxer while a demuxer init/reset request is
+  // being processed. See bug 1239983.
+  NS_ASSERTION(!mDemuxerInitRequest.Exists(), "Previous AppendBuffer didn't complete");
+  if (mDemuxerInitRequest.Exists()) {
+    mDemuxerInitRequest.Disconnect();
+  }
+
   for (auto& track : GetTracksList()) {
     // 2. Unset the last decode timestamp on all track buffers.
     // 3. Unset the last frame duration on all track buffers.
     // 4. Unset the highest end timestamp on all track buffers.
     // 5. Set the need random access point flag on all track buffers to true.
     track->ResetAppendState();
 
     // if we have been aborted, we may have pending frames that we are going
@@ -863,17 +870,17 @@ void
 TrackBuffersManager::OnDemuxerInitDone(nsresult)
 {
   MOZ_ASSERT(OnTaskQueue());
   mDemuxerInitRequest.Complete();
 
   if (!mInputDemuxer) {
     // mInputDemuxer shouldn't have been destroyed while a demuxer init/reset
     // request was being processed. See bug 1239983.
-    NS_WARNING("mInputDemuxer has been destroyed");
+    NS_ASSERTION(false, "mInputDemuxer has been destroyed");
     RejectAppend(NS_ERROR_ABORT, __func__);
   }
 
   MediaInfo info;
 
   uint32_t numVideos = mInputDemuxer->GetNumberTracks(TrackInfo::kVideoTrack);
   if (numVideos) {
     // We currently only handle the first video track.