diff options
author | kaorimatz <kaorimatz@gmail.com> | 2015-08-21 18:38:50 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-08-22 01:38:55 +0000 |
commit | 9deaa86136e74fbf22065bf8a479780942e81fc8 (patch) | |
tree | 034463cfe3e422af4e567d5f41aa6a2ec445caaa | |
parent | 7612f1711c8724661aac1e064632646f2299b2ff (diff) | |
download | webrtc-9deaa86136e74fbf22065bf8a479780942e81fc8.tar.gz |
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}
-rw-r--r-- | webrtc/modules/audio_device/android/audio_device_template.h | 24 |
1 files 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 { |