Bug 1324335. Part 3 - cache mTarget before resetting it. draft
authorJW Wang <jwwang@mozilla.com>
Mon, 19 Dec 2016 12:43:52 +0800
changeset 451006 b0591bdee6e699b5b7fa704ce45729ae37316f4c
parent 451005 baadb4aaec8cae54966ea0f8c28bfdf31f0f49f1
child 451007 a027e0bff4ea6ce0818969c39bcf671afefba570
push id39013
push userjwwang@mozilla.com
push dateMon, 19 Dec 2016 09:44:15 +0000
bugs1324335
milestone53.0a1
Bug 1324335. Part 3 - cache mTarget before resetting it. MozReview-Commit-ID: KknqPo2gGJK
dom/media/MediaDecoderStateMachine.cpp
--- a/dom/media/MediaDecoderStateMachine.cpp
+++ b/dom/media/MediaDecoderStateMachine.cpp
@@ -2215,28 +2215,31 @@ SeekingState::SeekCompleted()
 
     // We won't start MediaSink when paused. m{Audio,Video}Completed will
     // remain false and 'playbackEnded' won't be notified. Therefore we
     // need to set these flags explicitly when seeking to the end.
     mMaster->mAudioCompleted = true;
     mMaster->mVideoCompleted = true;
   }
 
+  // Cache mTarget for mSeekJob.Resolve() below will reset it.
+  SeekTarget target = mSeekJob.mTarget.ref();
+
   // We want to resolve the seek request prior finishing the first frame
   // to ensure that the seeked event is fired prior loadeded.
   mSeekJob.Resolve(__func__);
 
   // Notify FirstFrameLoaded now if we haven't since we've decoded some data
   // for readyState to transition to HAVE_CURRENT_DATA and fire 'loadeddata'.
   if (!mMaster->mSentFirstFrameLoadedEvent) {
     mMaster->FinishDecodeFirstFrame();
   }
 
   // Ensure timestamps are up to date.
-  if (!mSeekJob.mTarget->IsVideoOnly()) {
+  if (!target.IsVideoOnly()) {
     // Don't update playback position for video-only seek.
     // Otherwise we might have |newCurrentTime > mMediaSink->GetPosition()|
     // and fail the assertion in GetClock() since we didn't stop MediaSink.
     mMaster->UpdatePlaybackPositionInternal(newCurrentTime);
   }
 
   // Try to decode another frame to detect if we're at the end...
   SLOG("Seek completed, mCurrentPosition=%lld", mMaster->mCurrentPosition.Ref());