diff options
author | tommi@chromium.org <tommi@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-01-19 09:16:58 +0000 |
---|---|---|
committer | tommi@chromium.org <tommi@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-01-19 09:16:58 +0000 |
commit | 8f5fc718853a128dc2f70ec4e55db4044af64bcc (patch) | |
tree | 4f283d47012fd9594433990e89ad7f4fff3f0bcd /media/audio/audio_output_proxy.cc | |
parent | ae4e03118d9a8792b907c923adf6516495f20536 (diff) | |
download | chromium_src-8f5fc718853a128dc2f70ec4e55db4044af64bcc.zip chromium_src-8f5fc718853a128dc2f70ec4e55db4044af64bcc.tar.gz chromium_src-8f5fc718853a128dc2f70ec4e55db4044af64bcc.tar.bz2 |
Add thread safety to AudioManagerBase to protect access to the audio thread member variable.
This is is a tentative fix for an issue where the AudioManager can crash while tearing down
the audio thread. I suspect that this happens because more than one cleanup attempts were
made since the class wasn't thread safe. I'm also changing direct access to the thread's
MessageLoop* to use MessageLoopProxy based on the same theory.
BUG=110051
TEST=Run media tests.
Review URL: https://chromiumcodereview.appspot.com/9255017
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@118272 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'media/audio/audio_output_proxy.cc')
-rw-r--r-- | media/audio/audio_output_proxy.cc | 17 |
1 files changed, 8 insertions, 9 deletions
diff --git a/media/audio/audio_output_proxy.cc b/media/audio/audio_output_proxy.cc index e8309cf..29490db 100644 --- a/media/audio/audio_output_proxy.cc +++ b/media/audio/audio_output_proxy.cc @@ -1,4 +1,4 @@ -// Copyright (c) 2011 The Chromium Authors. All rights reserved. +// Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. @@ -14,17 +14,16 @@ AudioOutputProxy::AudioOutputProxy(AudioOutputDispatcher* dispatcher) state_(kCreated), physical_stream_(NULL), volume_(1.0) { - DCHECK_EQ(MessageLoop::current(), dispatcher_->message_loop()); } AudioOutputProxy::~AudioOutputProxy() { - DCHECK_EQ(MessageLoop::current(), dispatcher_->message_loop()); + DCHECK(CalledOnValidThread()); DCHECK(state_ == kCreated || state_ == kClosed); DCHECK(!physical_stream_); } bool AudioOutputProxy::Open() { - DCHECK_EQ(MessageLoop::current(), dispatcher_->message_loop()); + DCHECK(CalledOnValidThread()); DCHECK_EQ(state_, kCreated); if (!dispatcher_->StreamOpened()) { @@ -37,7 +36,7 @@ bool AudioOutputProxy::Open() { } void AudioOutputProxy::Start(AudioSourceCallback* callback) { - DCHECK_EQ(MessageLoop::current(), dispatcher_->message_loop()); + DCHECK(CalledOnValidThread()); DCHECK(physical_stream_ == NULL); DCHECK_EQ(state_, kOpened); @@ -54,7 +53,7 @@ void AudioOutputProxy::Start(AudioSourceCallback* callback) { } void AudioOutputProxy::Stop() { - DCHECK_EQ(MessageLoop::current(), dispatcher_->message_loop()); + DCHECK(CalledOnValidThread()); if (state_ != kPlaying) return; @@ -66,7 +65,7 @@ void AudioOutputProxy::Stop() { } void AudioOutputProxy::SetVolume(double volume) { - DCHECK_EQ(MessageLoop::current(), dispatcher_->message_loop()); + DCHECK(CalledOnValidThread()); volume_ = volume; if (physical_stream_) { physical_stream_->SetVolume(volume); @@ -74,12 +73,12 @@ void AudioOutputProxy::SetVolume(double volume) { } void AudioOutputProxy::GetVolume(double* volume) { - DCHECK_EQ(MessageLoop::current(), dispatcher_->message_loop()); + DCHECK(CalledOnValidThread()); *volume = volume_; } void AudioOutputProxy::Close() { - DCHECK_EQ(MessageLoop::current(), dispatcher_->message_loop()); + DCHECK(CalledOnValidThread()); DCHECK(state_ == kCreated || state_ == kError || state_ == kOpened); DCHECK(!physical_stream_); |