From 9deaa86136e74fbf22065bf8a479780942e81fc8 Mon Sep 17 00:00:00 2001 From: kaorimatz Date: Fri, 21 Aug 2015 18:38:50 -0700 Subject: [PATCH] Fix initialization/termination of AudioDeviceTemplate AudioDeviceTemplate doesn't initialize `output_` and `input_` if the initialization of `audio_manager_` succeeds. Similarly, it doesn't terminate `input_` and `audio_manager_` if the termination of `output_` succeeds. This CL fixes this. BUG= Review URL: https://codereview.webrtc.org/1296693003 Cr-Commit-Position: refs/heads/master@{#9760} --- .../android/audio_device_template.h | 24 +++++++++++++++---- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/webrtc/modules/audio_device/android/audio_device_template.h b/webrtc/modules/audio_device/android/audio_device_template.h index adc66fa6d4..653ff11d02 100644 --- a/webrtc/modules/audio_device/android/audio_device_template.h +++ b/webrtc/modules/audio_device/android/audio_device_template.h @@ -60,15 +60,29 @@ class AudioDeviceTemplate : public AudioDeviceGeneric { int32_t Init() override { DCHECK(thread_checker_.CalledOnValidThread()); DCHECK(!initialized_); - initialized_ = audio_manager_->Init() || output_.Init() || input_.Init(); - return initialized_ ? 0 : -1; + if (!audio_manager_->Init()) + return -1; + if (output_.Init() != 0) { + audio_manager_->Close(); + return -1; + } + if (input_.Init() != 0) { + output_.Terminate(); + audio_manager_->Close(); + return -1; + } + initialized_ = true; + return 0; } int32_t Terminate() override { DCHECK(thread_checker_.CalledOnValidThread()); - initialized_ = - !(output_.Terminate() || input_.Terminate() || audio_manager_->Close()); - return !initialized_ ? 0 : -1; + int32_t err = input_.Terminate(); + err |= output_.Terminate(); + err |= !audio_manager_->Close(); + initialized_ = false; + DCHECK_EQ(err, 0); + return err; } bool Initialized() const override {