Bug 1421134. P2 - run MediaCacheStream::SetReadMode() off the main thread.
MozReview-Commit-ID: A6ui5dtWhNt
--- a/dom/media/MediaCache.cpp
+++ b/dom/media/MediaCache.cpp
@@ -2505,22 +2505,26 @@ MediaCacheStream::GetNextCachedDataInter
NS_NOTREACHED("Should return in loop");
return -1;
}
void
MediaCacheStream::SetReadMode(ReadMode aMode)
{
- // TODO: Assert non-main thread.
- AutoLock lock(mMediaCache->Monitor());
- if (aMode == mCurrentMode)
- return;
- mCurrentMode = aMode;
- mMediaCache->QueueUpdate(lock);
+ nsCOMPtr<nsIRunnable> r = NS_NewRunnableFunction(
+ "MediaCacheStream::SetReadMode",
+ [ this, client = RefPtr<ChannelMediaResource>(mClient), aMode ]() {
+ AutoLock lock(mMediaCache->Monitor());
+ if (!mClosed && mCurrentMode != aMode) {
+ mCurrentMode = aMode;
+ mMediaCache->QueueUpdate(lock);
+ }
+ });
+ OwnerThread()->Dispatch(r.forget());
}
void
MediaCacheStream::SetPlaybackRate(uint32_t aBytesPerSecond)
{
MOZ_ASSERT(aBytesPerSecond > 0, "Zero playback rate not allowed");
nsCOMPtr<nsIRunnable> r = NS_NewRunnableFunction(