diff options
author | Glenn Kasten <gkasten@google.com> | 2013-11-20 13:54:52 -0800 |
---|---|---|
committer | Glenn Kasten <gkasten@google.com> | 2013-11-20 14:51:07 -0800 |
commit | e75da4004b2c814987aa2adf8a76190f92d99c65 (patch) | |
tree | 35c6bc8914384e610eba3633a08e2f5e78b062b5 /services/audioflinger/Effects.cpp | |
parent | 663c2247b71086e30bfd3192979d1dd7f15c539e (diff) | |
download | frameworks_av-e75da4004b2c814987aa2adf8a76190f92d99c65.zip frameworks_av-e75da4004b2c814987aa2adf8a76190f92d99c65.tar.gz frameworks_av-e75da4004b2c814987aa2adf8a76190f92d99c65.tar.bz2 |
Fix bug in creation of EffectHandle when out of memory
If there is insufficient client memory to create the EffectHandle,
it was returning a handle which would be useless. Now it correctly
reports the out-of-memory error back to client.
Change-Id: I894e65d5d17df39383032c1527be6ccd35f578bb
Diffstat (limited to 'services/audioflinger/Effects.cpp')
-rw-r--r-- | services/audioflinger/Effects.cpp | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/services/audioflinger/Effects.cpp b/services/audioflinger/Effects.cpp index bb98a35..59b4770 100644 --- a/services/audioflinger/Effects.cpp +++ b/services/audioflinger/Effects.cpp @@ -912,18 +912,15 @@ AudioFlinger::EffectHandle::EffectHandle(const sp<EffectModule>& effect, } int bufOffset = ((sizeof(effect_param_cblk_t) - 1) / sizeof(int) + 1) * sizeof(int); mCblkMemory = client->heap()->allocate(EFFECT_PARAM_BUFFER_SIZE + bufOffset); - if (mCblkMemory != 0) { - mCblk = static_cast<effect_param_cblk_t *>(mCblkMemory->pointer()); - - if (mCblk != NULL) { - new(mCblk) effect_param_cblk_t(); - mBuffer = (uint8_t *)mCblk + bufOffset; - } - } else { + if (mCblkMemory == 0 || + (mCblk = static_cast<effect_param_cblk_t *>(mCblkMemory->pointer())) == NULL) { ALOGE("not enough memory for Effect size=%u", EFFECT_PARAM_BUFFER_SIZE + sizeof(effect_param_cblk_t)); + mCblkMemory.clear(); return; } + new(mCblk) effect_param_cblk_t(); + mBuffer = (uint8_t *)mCblk + bufOffset; } AudioFlinger::EffectHandle::~EffectHandle() @@ -940,6 +937,11 @@ AudioFlinger::EffectHandle::~EffectHandle() disconnect(false); } +status_t AudioFlinger::EffectHandle::initCheck() +{ + return mClient == 0 || mCblkMemory != 0 ? OK : NO_MEMORY; +} + status_t AudioFlinger::EffectHandle::enable() { ALOGV("enable %p", this); |