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

Commit 637ee654 authored by Treehugger Robot's avatar Treehugger Robot Committed by Gerrit Code Review
Browse files

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

parents e7785479 3f51b54d
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();
            }
        }