From d8cf9aa813be5363fb5425b4f818a267edd5e750 Mon Sep 17 00:00:00 2001 From: Eric Laurent Date: Wed, 7 Sep 2016 16:58:39 -0700 Subject: SoundTrigger: get service by value. Get strong pointer to service interface by value and not reference to prevent race conditions where the service pointer can be cleared by another thread while in use. Bug: 30907212 Change-Id: I6f02ec3fd1e6392b842b334e1cc4f9aa23916009 (cherry picked from commit 3b01b3019b1c62132792a1a94e2dc1f7cfc84f2e) --- include/soundtrigger/SoundTrigger.h | 2 +- soundtrigger/SoundTrigger.cpp | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/include/soundtrigger/SoundTrigger.h b/include/soundtrigger/SoundTrigger.h index bf5e1de..9a05cac 100644 --- a/include/soundtrigger/SoundTrigger.h +++ b/include/soundtrigger/SoundTrigger.h @@ -68,7 +68,7 @@ public: private: SoundTrigger(sound_trigger_module_handle_t module, const sp&); - static const sp& getSoundTriggerHwService(); + static const sp getSoundTriggerHwService(); Mutex mLock; sp mISoundTrigger; diff --git a/soundtrigger/SoundTrigger.cpp b/soundtrigger/SoundTrigger.cpp index 2138cb7..e959b83 100644 --- a/soundtrigger/SoundTrigger.cpp +++ b/soundtrigger/SoundTrigger.cpp @@ -55,7 +55,7 @@ namespace { sp gDeathNotifier; }; // namespace anonymous -const sp& SoundTrigger::getSoundTriggerHwService() +const sp SoundTrigger::getSoundTriggerHwService() { Mutex::Autolock _l(gLock); if (gSoundTriggerHwService.get() == 0) { @@ -84,7 +84,7 @@ status_t SoundTrigger::listModules(struct sound_trigger_module_descriptor *modul uint32_t *numModules) { ALOGV("listModules()"); - const sp& service = getSoundTriggerHwService(); + const sp service = getSoundTriggerHwService(); if (service == 0) { return NO_INIT; } @@ -96,7 +96,7 @@ sp SoundTrigger::attach(const sound_trigger_module_handle_t module { ALOGV("attach()"); sp soundTrigger; - const sp& service = getSoundTriggerHwService(); + const sp service = getSoundTriggerHwService(); if (service == 0) { return soundTrigger; } @@ -116,7 +116,7 @@ sp SoundTrigger::attach(const sound_trigger_module_handle_t module status_t SoundTrigger::setCaptureState(bool active) { ALOGV("setCaptureState(%d)", active); - const sp& service = getSoundTriggerHwService(); + const sp service = getSoundTriggerHwService(); if (service == 0) { return NO_INIT; } -- cgit v1.1