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

Unified Diff: media/audio/audio_output_controller.cc

Issue 9255017: Add thread safety to AudioManagerBase to protect access to the audio thread member variable. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix style issue Created 8 years, 11 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/audio/audio_output_controller.h ('k') | media/audio/audio_output_dispatcher.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: media/audio/audio_output_controller.cc
diff --git a/media/audio/audio_output_controller.cc b/media/audio/audio_output_controller.cc
index 9f6d7da6cc4d8859b939f2eccb667ac9b6c59fb3..d087a70208a03623dbcd2a8783f51b461c1356c2 100644
--- a/media/audio/audio_output_controller.cc
+++ b/media/audio/audio_output_controller.cc
@@ -42,10 +42,11 @@ AudioOutputController::AudioOutputController(AudioManager* audio_manager,
AudioOutputController::~AudioOutputController() {
DCHECK_EQ(kClosed, state_);
- if (message_loop_ == MessageLoop::current()) {
+ DCHECK(message_loop_);
+
+ if (!message_loop_.get() || message_loop_->BelongsToCurrentThread()) {
DoStopCloseAndClearStream(NULL);
} else {
- DCHECK(message_loop_);
WaitableEvent completion(true /* manual reset */,
false /* initial state */);
message_loop_->PostTask(FROM_HERE,
@@ -145,7 +146,7 @@ void AudioOutputController::EnqueueData(const uint8* data, uint32 size) {
}
void AudioOutputController::DoCreate(const AudioParameters& params) {
- DCHECK_EQ(message_loop_, MessageLoop::current());
+ DCHECK(message_loop_->BelongsToCurrentThread());
// Close() can be called before DoCreate() is executed.
if (state_ == kClosed)
@@ -185,7 +186,7 @@ void AudioOutputController::DoCreate(const AudioParameters& params) {
}
void AudioOutputController::DoPlay() {
- DCHECK_EQ(message_loop_, MessageLoop::current());
+ DCHECK(message_loop_->BelongsToCurrentThread());
// We can start from created or paused state.
if (state_ != kCreated && state_ != kPaused)
@@ -204,14 +205,14 @@ void AudioOutputController::DoPlay() {
FROM_HERE,
base::Bind(&AudioOutputController::PollAndStartIfDataReady,
weak_this_.GetWeakPtr()),
- base::TimeDelta::FromMilliseconds(kPollPauseInMilliseconds));
+ kPollPauseInMilliseconds);
} else {
StartStream();
}
}
void AudioOutputController::PollAndStartIfDataReady() {
- DCHECK_EQ(message_loop_, MessageLoop::current());
+ DCHECK(message_loop_->BelongsToCurrentThread());
// Being paranoid: do nothing if state unexpectedly changed.
if ((state_ != kStarting) && (state_ != kPausedWhenStarting))
@@ -232,12 +233,12 @@ void AudioOutputController::PollAndStartIfDataReady() {
FROM_HERE,
base::Bind(&AudioOutputController::PollAndStartIfDataReady,
weak_this_.GetWeakPtr()),
- base::TimeDelta::FromMilliseconds(kPollPauseInMilliseconds));
+ kPollPauseInMilliseconds);
}
}
void AudioOutputController::StartStream() {
- DCHECK_EQ(message_loop_, MessageLoop::current());
+ DCHECK(message_loop_->BelongsToCurrentThread());
state_ = kPlaying;
// We start the AudioOutputStream lazily.
@@ -248,7 +249,7 @@ void AudioOutputController::StartStream() {
}
void AudioOutputController::DoPause() {
- DCHECK_EQ(message_loop_, MessageLoop::current());
+ DCHECK(message_loop_->BelongsToCurrentThread());
if (stream_)
stream_->Stop();
@@ -282,7 +283,7 @@ void AudioOutputController::DoPause() {
}
void AudioOutputController::DoFlush() {
- DCHECK_EQ(message_loop_, MessageLoop::current());
+ DCHECK(message_loop_->BelongsToCurrentThread());
// TODO(hclam): Actually flush the audio device.
@@ -296,7 +297,7 @@ void AudioOutputController::DoFlush() {
}
void AudioOutputController::DoClose(const base::Closure& closed_task) {
- DCHECK_EQ(message_loop_, MessageLoop::current());
+ DCHECK(message_loop_->BelongsToCurrentThread());
if (state_ != kClosed) {
DoStopCloseAndClearStream(NULL);
@@ -312,7 +313,7 @@ void AudioOutputController::DoClose(const base::Closure& closed_task) {
}
void AudioOutputController::DoSetVolume(double volume) {
- DCHECK_EQ(message_loop_, MessageLoop::current());
+ DCHECK(message_loop_->BelongsToCurrentThread());
// Saves the volume to a member first. We may not be able to set the volume
// right away but when the stream is created we'll set the volume.
@@ -332,7 +333,7 @@ void AudioOutputController::DoSetVolume(double volume) {
}
void AudioOutputController::DoReportError(int code) {
- DCHECK_EQ(message_loop_, MessageLoop::current());
+ DCHECK(message_loop_->BelongsToCurrentThread());
if (state_ != kClosed)
handler_->OnError(this, code);
}
@@ -415,7 +416,7 @@ void AudioOutputController::SubmitOnMoreData_Locked() {
}
void AudioOutputController::DoStopCloseAndClearStream(WaitableEvent *done) {
- DCHECK_EQ(message_loop_, MessageLoop::current());
+ DCHECK(message_loop_->BelongsToCurrentThread());
// Allow calling unconditionally and bail if we don't have a stream_ to close.
if (stream_ != NULL) {
« no previous file with comments | « media/audio/audio_output_controller.h ('k') | media/audio/audio_output_dispatcher.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698