Avoid race when stopping audio unit on iOS BUG=webrtc:5993 R=tkchin@webrtc.org Review URL: https://codereview.webrtc.org/2079383002 . Cr-Commit-Position: refs/heads/master@{#13234}
diff --git a/webrtc/modules/audio_device/ios/audio_device_ios.mm b/webrtc/modules/audio_device/ios/audio_device_ios.mm index 4c1b41d..0a8da0f 100644 --- a/webrtc/modules/audio_device/ios/audio_device_ios.mm +++ b/webrtc/modules/audio_device/ios/audio_device_ios.mm
@@ -829,6 +829,9 @@ void AudioDeviceIOS::ShutdownPlayOrRecord() { LOGI() << "ShutdownPlayOrRecord"; + // Stop the audio unit to prevent any additional audio callbacks. + audio_unit_->Stop(); + // Close and delete the voice-processing I/O unit. audio_unit_.reset();
diff --git a/webrtc/modules/audio_device/ios/voice_processing_audio_unit.mm b/webrtc/modules/audio_device/ios/voice_processing_audio_unit.mm index a9d599a..d8805a1 100644 --- a/webrtc/modules/audio_device/ios/voice_processing_audio_unit.mm +++ b/webrtc/modules/audio_device/ios/voice_processing_audio_unit.mm
@@ -380,6 +380,7 @@ break; } + RTCLog(@"Disposing audio unit."); OSStatus result = AudioComponentInstanceDispose(vpio_unit_); if (result != noErr) { RTCLogError(@"AudioComponentInstanceDispose failed. Error=%ld.",