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
--- 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)