From eecd7659823504c6c65a2b0f4267515a8e3f24cb Mon Sep 17 00:00:00 2001 From: Eric Laurent Date: Thu, 4 Jun 2015 16:20:16 -0700 Subject: Use only strong references to AudioEffect Do not refer to an AudioEffect instance by a raw pointer from the child AudioEffectClient. Also align destructor cleanup sequence on those of AudioTrack and AudioRecord. Bug: 21629892. Change-Id: I970307aedbc38db2e41a2cc652fd6df9112f712c --- include/media/AudioEffect.h | 28 ++++++++++++++++++++++------ 1 file changed, 22 insertions(+), 6 deletions(-) (limited to 'include') diff --git a/include/media/AudioEffect.h b/include/media/AudioEffect.h index 61da4f2..5af6c10 100644 --- a/include/media/AudioEffect.h +++ b/include/media/AudioEffect.h @@ -429,7 +429,8 @@ protected: private: // Implements the IEffectClient interface - class EffectClient : public android::BnEffectClient, public android::IBinder::DeathRecipient + class EffectClient : + public android::BnEffectClient, public android::IBinder::DeathRecipient { public: @@ -437,24 +438,39 @@ private: // IEffectClient virtual void controlStatusChanged(bool controlGranted) { - mEffect->controlStatusChanged(controlGranted); + sp effect = mEffect.promote(); + if (effect != 0) { + effect->controlStatusChanged(controlGranted); + } } virtual void enableStatusChanged(bool enabled) { - mEffect->enableStatusChanged(enabled); + sp effect = mEffect.promote(); + if (effect != 0) { + effect->enableStatusChanged(enabled); + } } virtual void commandExecuted(uint32_t cmdCode, uint32_t cmdSize, void *pCmdData, uint32_t replySize, void *pReplyData) { - mEffect->commandExecuted(cmdCode, cmdSize, pCmdData, replySize, pReplyData); + sp effect = mEffect.promote(); + if (effect != 0) { + effect->commandExecuted( + cmdCode, cmdSize, pCmdData, replySize, pReplyData); + } } // IBinder::DeathRecipient - virtual void binderDied(const wp& who) {mEffect->binderDied();} + virtual void binderDied(const wp& who) { + sp effect = mEffect.promote(); + if (effect != 0) { + effect->binderDied(); + } + } private: - AudioEffect *mEffect; + wp mEffect; }; void binderDied(); -- cgit v1.1