Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3b01b301 authored by Eric Laurent's avatar Eric Laurent
Browse files

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
parent de97dbd6
Loading
Loading
Loading
Loading
+1 −1
Original line number Original line Diff line number Diff line
@@ -68,7 +68,7 @@ public:
private:
private:
            SoundTrigger(sound_trigger_module_handle_t module,
            SoundTrigger(sound_trigger_module_handle_t module,
                            const sp<SoundTriggerCallback>&);
                            const sp<SoundTriggerCallback>&);
            static const sp<ISoundTriggerHwService>& getSoundTriggerHwService();
            static const sp<ISoundTriggerHwService> getSoundTriggerHwService();


            Mutex                               mLock;
            Mutex                               mLock;
            sp<ISoundTrigger>                   mISoundTrigger;
            sp<ISoundTrigger>                   mISoundTrigger;
+4 −4
Original line number Original line Diff line number Diff line
@@ -55,7 +55,7 @@ namespace {
    sp<DeathNotifier>         gDeathNotifier;
    sp<DeathNotifier>         gDeathNotifier;
}; // namespace anonymous
}; // namespace anonymous


const sp<ISoundTriggerHwService>& SoundTrigger::getSoundTriggerHwService()
const sp<ISoundTriggerHwService> SoundTrigger::getSoundTriggerHwService()
{
{
    Mutex::Autolock _l(gLock);
    Mutex::Autolock _l(gLock);
    if (gSoundTriggerHwService.get() == 0) {
    if (gSoundTriggerHwService.get() == 0) {
@@ -84,7 +84,7 @@ status_t SoundTrigger::listModules(struct sound_trigger_module_descriptor *modul
                                 uint32_t *numModules)
                                 uint32_t *numModules)
{
{
    ALOGV("listModules()");
    ALOGV("listModules()");
    const sp<ISoundTriggerHwService>& service = getSoundTriggerHwService();
    const sp<ISoundTriggerHwService> service = getSoundTriggerHwService();
    if (service == 0) {
    if (service == 0) {
        return NO_INIT;
        return NO_INIT;
    }
    }
@@ -96,7 +96,7 @@ sp<SoundTrigger> SoundTrigger::attach(const sound_trigger_module_handle_t module
{
{
    ALOGV("attach()");
    ALOGV("attach()");
    sp<SoundTrigger> soundTrigger;
    sp<SoundTrigger> soundTrigger;
    const sp<ISoundTriggerHwService>& service = getSoundTriggerHwService();
    const sp<ISoundTriggerHwService> service = getSoundTriggerHwService();
    if (service == 0) {
    if (service == 0) {
        return soundTrigger;
        return soundTrigger;
    }
    }
@@ -116,7 +116,7 @@ sp<SoundTrigger> SoundTrigger::attach(const sound_trigger_module_handle_t module
status_t SoundTrigger::setCaptureState(bool active)
status_t SoundTrigger::setCaptureState(bool active)
{
{
    ALOGV("setCaptureState(%d)", active);
    ALOGV("setCaptureState(%d)", active);
    const sp<ISoundTriggerHwService>& service = getSoundTriggerHwService();
    const sp<ISoundTriggerHwService> service = getSoundTriggerHwService();
    if (service == 0) {
    if (service == 0) {
        return NO_INIT;
        return NO_INIT;
    }
    }