diff options
author | enal@chromium.org <enal@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-05-03 23:57:11 +0000 |
---|---|---|
committer | enal@chromium.org <enal@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-05-03 23:57:11 +0000 |
commit | 5541266ae7f63e99064dd6c46d8b27dedb3e8890 (patch) | |
tree | 90c413a54d4bceadeb563b857b61de9422288c98 /media | |
parent | 75507d430d2e82c0a3e25bb899e552e2b6762b69 (diff) | |
download | chromium_src-5541266ae7f63e99064dd6c46d8b27dedb3e8890.zip chromium_src-5541266ae7f63e99064dd6c46d8b27dedb3e8890.tar.gz chromium_src-5541266ae7f63e99064dd6c46d8b27dedb3e8890.tar.bz2 |
Fix race condition caused by r114084.
It added base::unretained(this) when scheduling a task, as a result AudioOutputController can be deleted before task run, and it would use junk instead of AudioSource.
BUG=124991
Review URL: http://codereview.chromium.org/10261027
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@135244 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'media')
-rw-r--r-- | media/audio/audio_output_controller.cc | 12 |
1 files changed, 6 insertions, 6 deletions
diff --git a/media/audio/audio_output_controller.cc b/media/audio/audio_output_controller.cc index 1f8d78f..cdaca79 100644 --- a/media/audio/audio_output_controller.cc +++ b/media/audio/audio_output_controller.cc @@ -81,32 +81,32 @@ scoped_refptr<AudioOutputController> AudioOutputController::Create( void AudioOutputController::Play() { DCHECK(message_loop_); message_loop_->PostTask(FROM_HERE, base::Bind( - &AudioOutputController::DoPlay, base::Unretained(this))); + &AudioOutputController::DoPlay, this)); } void AudioOutputController::Pause() { DCHECK(message_loop_); message_loop_->PostTask(FROM_HERE, base::Bind( - &AudioOutputController::DoPause, base::Unretained(this))); + &AudioOutputController::DoPause, this)); } void AudioOutputController::Flush() { DCHECK(message_loop_); message_loop_->PostTask(FROM_HERE, base::Bind( - &AudioOutputController::DoFlush, base::Unretained(this))); + &AudioOutputController::DoFlush, this)); } void AudioOutputController::Close(const base::Closure& closed_task) { DCHECK(!closed_task.is_null()); DCHECK(message_loop_); message_loop_->PostTaskAndReply(FROM_HERE, base::Bind( - &AudioOutputController::DoClose, base::Unretained(this)), closed_task); + &AudioOutputController::DoClose, this), closed_task); } void AudioOutputController::SetVolume(double volume) { DCHECK(message_loop_); message_loop_->PostTask(FROM_HERE, base::Bind( - &AudioOutputController::DoSetVolume, base::Unretained(this), volume)); + &AudioOutputController::DoSetVolume, this, volume)); } void AudioOutputController::DoCreate(AudioManager* audio_manager, @@ -314,7 +314,7 @@ void AudioOutputController::WaitTillDataReady() { void AudioOutputController::OnError(AudioOutputStream* stream, int code) { // Handle error on the audio controller thread. message_loop_->PostTask(FROM_HERE, base::Bind( - &AudioOutputController::DoReportError, base::Unretained(this), code)); + &AudioOutputController::DoReportError, this, code)); } void AudioOutputController::DoStopCloseAndClearStream(WaitableEvent *done) { |