summaryrefslogtreecommitdiffstats
path: root/media
diff options
context:
space:
mode:
authorenal@chromium.org <enal@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-05-03 23:57:11 +0000
committerenal@chromium.org <enal@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-05-03 23:57:11 +0000
commit5541266ae7f63e99064dd6c46d8b27dedb3e8890 (patch)
tree90c413a54d4bceadeb563b857b61de9422288c98 /media
parent75507d430d2e82c0a3e25bb899e552e2b6762b69 (diff)
downloadchromium_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.cc12
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) {