Bug 1351053. P2 - fix data race in accessing mAudioDemuxer/mVideoDemuxer. draft
authorJW Wang <jwwang@mozilla.com>
Thu, 13 Apr 2017 15:42:52 +0800
changeset 562591 2dcd57227408af3d47a649a764793a5a9206f019
parent 562590 452a50a13698dfeac6fb0d1493aba5774f266749
child 562815 6b45e99e454593d309df7f63fb730b622dad87cb
push id54059
push userjwwang@mozilla.com
push dateFri, 14 Apr 2017 03:31:33 +0000
bugs1351053
milestone55.0a1
Bug 1351053. P2 - fix data race in accessing mAudioDemuxer/mVideoDemuxer. 1. http://searchfox.org/mozilla-central/rev/944f87c575e8a0bcefc1ed8efff10b34cf7a5169/dom/media/MediaFormatReader.cpp#755 mAudioDemuxer is modified on the task queue thread of MFR in Shutdown() called by MFR::Shutdown(). 2. http://searchfox.org/mozilla-central/rev/944f87c575e8a0bcefc1ed8efff10b34cf7a5169/dom/media/MediaFormatReader.cpp#1082 mAudioDemuxer is read on the task queue thread of DemuxerProxy in DemuxerProxy::NotifyDataArrived(). MozReview-Commit-ID: 8qLAzNKjuzb
dom/media/MediaFormatReader.cpp
--- a/dom/media/MediaFormatReader.cpp
+++ b/dom/media/MediaFormatReader.cpp
@@ -746,25 +746,25 @@ public:
 
   ~DemuxerProxy()
   {
     MOZ_COUNT_DTOR(DemuxerProxy);
   }
 
   RefPtr<ShutdownPromise> Shutdown()
   {
-    mData->mAudioDemuxer = nullptr;
-    mData->mVideoDemuxer = nullptr;
     RefPtr<Data> data = mData.forget();
     return InvokeAsync(mTaskQueue, __func__, [data]() {
       // We need to clear our reference to the demuxer now. So that in the event
       // the init promise wasn't resolved, such as what can happen with the
       // mediasource demuxer that is waiting on more data, it will force the
       // init promise to be rejected.
       data->mDemuxer = nullptr;
+      data->mAudioDemuxer = nullptr;
+      data->mVideoDemuxer = nullptr;
       return ShutdownPromise::CreateAndResolve(true, __func__);
     });
   }
 
   RefPtr<MediaDataDemuxer::InitPromise> Init();
 
   Wrapper*
   GetTrackDemuxer(TrackType aTrack, uint32_t aTrackNumber)