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

Commit 1b201ee7 authored by haobo10173529's avatar haobo10173529 Committed by android-build-merger
Browse files

Merge "Prevent object of AudioEffect be deleted until construction finished"

am: 637ee654

Change-Id: I6e953a0a5bb460530dfcde7ebf54942bd4ea095c
parents e414f58c 637ee654
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -52,6 +52,7 @@ AudioEffect::AudioEffect(const effect_uuid_t *type,
                )
    : mStatus(NO_INIT), mOpPackageName(opPackageName)
{
    AutoMutex lock(mConstructLock);
    mStatus = set(type, uuid, priority, cbf, user, sessionId, io);
}

@@ -85,6 +86,7 @@ AudioEffect::AudioEffect(const char *typeStr,
        }
    }

    AutoMutex lock(mConstructLock);
    mStatus = set(pType, pUuid, priority, cbf, user, sessionId, io);
}

+21 −0
Original line number Diff line number Diff line
@@ -414,6 +414,7 @@ protected:
     effect_descriptor_t     mDescriptor;        // effect descriptor
     int32_t                 mId;                // system wide unique effect engine instance ID
     Mutex                   mLock;              // Mutex for mEnabled access
     Mutex                   mConstructLock;     // Mutex for integrality construction

     String16                mOpPackageName;     // The package name used for app op checks.

@@ -440,12 +441,22 @@ private:
        virtual void controlStatusChanged(bool controlGranted) {
            sp<AudioEffect> effect = mEffect.promote();
            if (effect != 0) {
                {
                    // Got the mConstructLock means the construction of AudioEffect
                    // has finished, we should release the mConstructLock immediately.
                    AutoMutex lock(effect->mConstructLock);
                }
                effect->controlStatusChanged(controlGranted);
            }
        }
        virtual void enableStatusChanged(bool enabled) {
            sp<AudioEffect> effect = mEffect.promote();
            if (effect != 0) {
                {
                    // Got the mConstructLock means the construction of AudioEffect
                    // has finished, we should release the mConstructLock immediately.
                    AutoMutex lock(effect->mConstructLock);
                }
                effect->enableStatusChanged(enabled);
            }
        }
@@ -456,6 +467,11 @@ private:
                                     void *pReplyData) {
            sp<AudioEffect> effect = mEffect.promote();
            if (effect != 0) {
                {
                    // Got the mConstructLock means the construction of AudioEffect
                    // has finished, we should release the mConstructLock immediately.
                    AutoMutex lock(effect->mConstructLock);
                }
                effect->commandExecuted(
                    cmdCode, cmdSize, pCmdData, replySize, pReplyData);
            }
@@ -465,6 +481,11 @@ private:
        virtual void binderDied(const wp<IBinder>& /*who*/) {
            sp<AudioEffect> effect = mEffect.promote();
            if (effect != 0) {
                {
                    // Got the mConstructLock means the construction of AudioEffect
                    // has finished, we should release the mConstructLock immediately.
                    AutoMutex lock(effect->mConstructLock);
                }
                effect->binderDied();
            }
        }