Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1007)

Unified Diff: media/base/audio_renderer_mixer_input.cc

Issue 1748183006: Add lock to fix race in AudioRendererMixerInput. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Better thread safety comments Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « media/base/audio_renderer_mixer_input.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: media/base/audio_renderer_mixer_input.cc
diff --git a/media/base/audio_renderer_mixer_input.cc b/media/base/audio_renderer_mixer_input.cc
index 5743700f04b0a62c1c3c6eaf0f2d0bfa54aef0f5..e47cbea3845af27576be54424e3485382f27f37a 100644
--- a/media/base/audio_renderer_mixer_input.cc
+++ b/media/base/audio_renderer_mixer_input.cc
@@ -32,12 +32,14 @@ AudioRendererMixerInput::AudioRendererMixerInput(
base::Unretained(this))) {}
AudioRendererMixerInput::~AudioRendererMixerInput() {
+ DCHECK(!started_);
DCHECK(!mixer_);
}
void AudioRendererMixerInput::Initialize(
const AudioParameters& params,
AudioRendererSink::RenderCallback* callback) {
+ DCHECK(!started_);
DCHECK(!mixer_);
DCHECK(callback);
@@ -106,6 +108,7 @@ void AudioRendererMixerInput::Pause() {
}
bool AudioRendererMixerInput::SetVolume(double volume) {
+ base::AutoLock auto_lock(volume_lock_);
volume_ = volume;
return true;
}
@@ -190,7 +193,13 @@ double AudioRendererMixerInput::ProvideInput(AudioBus* audio_bus,
frames_filled, audio_bus->frames() - frames_filled);
}
- return frames_filled > 0 ? volume_ : 0;
+ // We're reading |volume_| from the audio device thread and must avoid racing
+ // with the main/media thread calls to SetVolume(). See thread safety comment
+ // in the header file.
+ {
+ base::AutoLock auto_lock(volume_lock_);
+ return frames_filled > 0 ? volume_ : 0;
+ }
}
void AudioRendererMixerInput::OnRenderError() {
« no previous file with comments | « media/base/audio_renderer_mixer_input.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698