summaryrefslogtreecommitdiffstats
path: root/media/audio/audio_output_proxy.cc
diff options
context:
space:
mode:
authortommi@chromium.org <tommi@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-01-19 09:16:58 +0000
committertommi@chromium.org <tommi@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-01-19 09:16:58 +0000
commit8f5fc718853a128dc2f70ec4e55db4044af64bcc (patch)
tree4f283d47012fd9594433990e89ad7f4fff3f0bcd /media/audio/audio_output_proxy.cc
parentae4e03118d9a8792b907c923adf6516495f20536 (diff)
downloadchromium_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.cc17
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_);