diff options
author | Eric Laurent <elaurent@google.com> | 2015-06-04 16:20:16 -0700 |
---|---|---|
committer | Eric Laurent <elaurent@google.com> | 2015-06-08 18:47:51 -0700 |
commit | eecd7659823504c6c65a2b0f4267515a8e3f24cb (patch) | |
tree | 458dcc99c0a5a8ad6609ddec67bc903c388e4e8d /media/libmedia/AudioEffect.cpp | |
parent | d16a8ef26fd1f7a86061c396c5865564af2f1abb (diff) | |
download | frameworks_av-eecd7659823504c6c65a2b0f4267515a8e3f24cb.zip frameworks_av-eecd7659823504c6c65a2b0f4267515a8e3f24cb.tar.gz frameworks_av-eecd7659823504c6c65a2b0f4267515a8e3f24cb.tar.bz2 |
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
Diffstat (limited to 'media/libmedia/AudioEffect.cpp')
-rw-r--r-- | media/libmedia/AudioEffect.cpp | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/media/libmedia/AudioEffect.cpp b/media/libmedia/AudioEffect.cpp index bbeb854..ff82544 100644 --- a/media/libmedia/AudioEffect.cpp +++ b/media/libmedia/AudioEffect.cpp @@ -134,12 +134,14 @@ status_t AudioEffect::set(const effect_uuid_t *type, if (iEffect == 0 || (mStatus != NO_ERROR && mStatus != ALREADY_EXISTS)) { ALOGE("set(): AudioFlinger could not create effect, status: %d", mStatus); + if (iEffect == 0) { + mStatus = NO_INIT; + } return mStatus; } mEnabled = (volatile int32_t)enabled; - mIEffect = iEffect; cblk = iEffect->getCblk(); if (cblk == 0) { mStatus = NO_INIT; @@ -147,6 +149,7 @@ status_t AudioEffect::set(const effect_uuid_t *type, return mStatus; } + mIEffect = iEffect; mCblkMemory = cblk; mCblk = static_cast<effect_param_cblk_t*>(cblk->pointer()); int bufOffset = ((sizeof(effect_param_cblk_t) - 1) / sizeof(int) + 1) * sizeof(int); @@ -177,11 +180,11 @@ AudioEffect::~AudioEffect() mIEffect->disconnect(); IInterface::asBinder(mIEffect)->unlinkToDeath(mIEffectClient); } + mIEffect.clear(); + mCblkMemory.clear(); + mIEffectClient.clear(); IPCThreadState::self()->flushCommands(); } - mIEffect.clear(); - mIEffectClient.clear(); - mCblkMemory.clear(); } |