Index: media/audio/audio_output_controller.cc |
diff --git a/media/audio/audio_output_controller.cc b/media/audio/audio_output_controller.cc |
index 405a02f1465775e86abb49d907aa35bb72b3b68f..30ea33daab866bd036339bdbf50b32dbcf731be2 100644 |
--- a/media/audio/audio_output_controller.cc |
+++ b/media/audio/audio_output_controller.cc |
@@ -45,7 +45,7 @@ AudioOutputController::AudioOutputController( |
diverting_to_stream_(NULL), |
volume_(1.0), |
state_(kEmpty), |
- num_allowed_io_(0), |
+ not_currently_in_on_more_io_data_(1), |
sync_reader_(sync_reader), |
message_loop_(audio_manager->GetTaskRunner()), |
#if defined(AUDIO_POWER_MONITORING) |
@@ -62,6 +62,8 @@ AudioOutputController::AudioOutputController( |
AudioOutputController::~AudioOutputController() { |
DCHECK_EQ(kClosed, state_); |
+ // TODO(dalecurtis): Remove debugging for http://crbug.com/349651 |
+ CHECK(!base::AtomicRefCountDec(¬_currently_in_on_more_io_data_)); |
} |
// static |
@@ -191,8 +193,6 @@ void AudioOutputController::DoPlay() { |
power_poll_callback_.callback().Run(); |
#endif |
- on_more_io_data_called_ = 0; |
- AllowEntryToOnMoreIOData(); |
stream_->Start(this); |
// For UMA tracking purposes, start the wedge detection timer. This allows us |
@@ -232,7 +232,6 @@ void AudioOutputController::StopStream() { |
if (state_ == kPlaying) { |
wedge_timer_.reset(); |
stream_->Stop(); |
- DisallowEntryToOnMoreIOData(); |
#if defined(AUDIO_POWER_MONITORING) |
power_poll_callback_.Cancel(); |
@@ -334,7 +333,7 @@ int AudioOutputController::OnMoreData(AudioBus* dest, |
int AudioOutputController::OnMoreIOData(AudioBus* source, |
AudioBus* dest, |
AudioBuffersState buffers_state) { |
- DisallowEntryToOnMoreIOData(); |
+ CHECK(!base::AtomicRefCountDec(¬_currently_in_on_more_io_data_)); |
TRACE_EVENT0("audio", "AudioOutputController::OnMoreIOData"); |
// Indicate that we haven't wedged (at least not indefinitely, WedgeCheck() |
@@ -354,7 +353,7 @@ int AudioOutputController::OnMoreIOData(AudioBus* source, |
power_monitor_.Scan(*dest, frames); |
#endif |
- AllowEntryToOnMoreIOData(); |
+ base::AtomicRefCountInc(¬_currently_in_on_more_io_data_); |
return frames; |
} |
@@ -456,16 +455,6 @@ void AudioOutputController::DoStopDiverting() { |
DCHECK(!diverting_to_stream_); |
} |
-void AudioOutputController::AllowEntryToOnMoreIOData() { |
- DCHECK(base::AtomicRefCountIsZero(&num_allowed_io_)); |
- base::AtomicRefCountInc(&num_allowed_io_); |
-} |
- |
-void AudioOutputController::DisallowEntryToOnMoreIOData() { |
- const bool is_zero = !base::AtomicRefCountDec(&num_allowed_io_); |
- DCHECK(is_zero); |
-} |
- |
void AudioOutputController::WedgeCheck() { |
DCHECK(message_loop_->BelongsToCurrentThread()); |