Index: www/firefox/files/patch-dom_media_AudioStream.cpp =================================================================== --- www/firefox/files/patch-dom_media_AudioStream.cpp +++ www/firefox/files/patch-dom_media_AudioStream.cpp @@ -1,5 +1,5 @@ --- dom/media/AudioStream.cpp.orig 2020-09-02 19:01:19.287101000 +0800 -+++ dom/media/AudioStream.cpp 2020-09-02 23:05:54.175619000 +0800 ++++ dom/media/AudioStream.cpp 2020-09-03 16:26:56.150764000 +0800 @@ -582,8 +582,7 @@ void AudioStream::GetTimeStretched(AudioBufferWriter& bool AudioStream::CheckThreadIdChanged() { #ifdef MOZ_GECKO_PROFILER @@ -10,23 +10,12 @@ return true; } #endif -@@ -591,7 +590,8 @@ bool AudioStream::CheckThreadIdChanged() { - } - - long AudioStream::DataCallback(void* aBuffer, long aFrames) { -- if (!mSandboxed && CheckThreadIdChanged()) { -+ bool threadIdChanged = false; -+ if (!mSandboxed && (threadIdChanged = CheckThreadIdChanged())) { - CubebUtils::GetAudioThreadRegistry()->Register(mAudioThreadId); - } - WebCore::DenormalDisabler disabler; -@@ -649,9 +649,12 @@ long AudioStream::DataCallback(void* aBuffer, long aFr +@@ -649,9 +648,12 @@ long AudioStream::DataCallback(void* aBuffer, long aFr mDumpFile.Write(static_cast(aBuffer), aFrames * mOutChannels); -- if (!mSandboxed && writer.Available() != 0) { +#ifdef MOZ_GECKO_PROFILER -+ if (!mSandboxed && writer.Available() != 0 && !threadIdChanged) { + if (!mSandboxed && writer.Available() != 0) { CubebUtils::GetAudioThreadRegistry()->Unregister(mAudioThreadId); + mAudioThreadId.store(0, std::memory_order_release); } @@ -34,7 +23,7 @@ return aFrames - writer.Available(); } -@@ -667,6 +670,18 @@ void AudioStream::StateCallback(cubeb_state aState) { +@@ -667,6 +669,18 @@ void AudioStream::StateCallback(cubeb_state aState) { mState = ERRORED; mDataSource.Errored(); }