Bug 1412205 - MediaCacheStream::Read() should update mStreamOffset before releasing the monitor.
MediaCache::Update() depends on mStreamOffset to make decision whether to
read streams or not. It is important to update mStreamOffset before releasing
the monitor so Update() won't make wrong decisions based on the stale value.
MozReview-Commit-ID: 40jUk5xd6GR
--- a/dom/media/MediaCache.cpp
+++ b/dom/media/MediaCache.cpp
@@ -2496,16 +2496,23 @@ MediaCacheStream::Read(char* aBuffer, ui
if (mCurrentMode == MODE_METADATA) {
streamWithPartialBlock->mMetadataInPartialBlockBuffer = true;
}
streamOffset += bytes;
count = bytes;
break;
}
+ if (mStreamOffset != streamOffset) {
+ // Updat mStreamOffset before we drop the lock. We need to run
+ // Update() again since stream reading strategy might have changed.
+ mStreamOffset = streamOffset;
+ mMediaCache->QueueUpdate();
+ }
+
// No data has been read yet, so block
mon.Wait();
if (mClosed) {
// We may have successfully read some data, but let's just throw
// that out.
return NS_ERROR_FAILURE;
}
continue;