summaryrefslogtreecommitdiffstats
path: root/services
diff options
context:
space:
mode:
authorGlenn Kasten <gkasten@google.com>2011-12-13 11:50:00 -0800
committerGlenn Kasten <gkasten@google.com>2011-12-15 12:51:52 -0800
commitf3990f2cc8fd824ae52a880a7b22248e1bdfb192 (patch)
treee411cbecc6eb0511a485844e1827a5b4aa770d81 /services
parenteebeceec684a36222b4559e3157b0db04c0a67ed (diff)
downloadframeworks_av-f3990f2cc8fd824ae52a880a7b22248e1bdfb192.zip
frameworks_av-f3990f2cc8fd824ae52a880a7b22248e1bdfb192.tar.gz
frameworks_av-f3990f2cc8fd824ae52a880a7b22248e1bdfb192.tar.bz2
Improve resistance to leaks for ConfigEvent
A Vector of pointers is risky, as there is no ownership (and the ThreadBase destructor was not deleting them, so if there were any left over at end it would leak). Replaced by a Vector of values. Change-Id: Iddde72dc30134adfcf724dec26cbe0a742509b8c
Diffstat (limited to 'services')
-rw-r--r--services/audioflinger/AudioFlinger.cpp13
-rw-r--r--services/audioflinger/AudioFlinger.h2
2 files changed, 7 insertions, 8 deletions
diff --git a/services/audioflinger/AudioFlinger.cpp b/services/audioflinger/AudioFlinger.cpp
index b48f23d..39f95bb 100644
--- a/services/audioflinger/AudioFlinger.cpp
+++ b/services/audioflinger/AudioFlinger.cpp
@@ -1062,9 +1062,9 @@ void AudioFlinger::ThreadBase::sendConfigEvent(int event, int param)
// sendConfigEvent_l() must be called with ThreadBase::mLock held
void AudioFlinger::ThreadBase::sendConfigEvent_l(int event, int param)
{
- ConfigEvent *configEvent = new ConfigEvent();
- configEvent->mEvent = event;
- configEvent->mParam = param;
+ ConfigEvent configEvent;
+ configEvent.mEvent = event;
+ configEvent.mParam = param;
mConfigEvents.add(configEvent);
ALOGV("sendConfigEvent() num events %d event %d, param %d", mConfigEvents.size(), event, param);
mWaitWorkCV.signal();
@@ -1075,15 +1075,14 @@ void AudioFlinger::ThreadBase::processConfigEvents()
mLock.lock();
while(!mConfigEvents.isEmpty()) {
ALOGV("processConfigEvents() remaining events %d", mConfigEvents.size());
- ConfigEvent *configEvent = mConfigEvents[0];
+ ConfigEvent configEvent = mConfigEvents[0];
mConfigEvents.removeAt(0);
// release mLock before locking AudioFlinger mLock: lock order is always
// AudioFlinger then ThreadBase to avoid cross deadlock
mLock.unlock();
mAudioFlinger->mLock.lock();
- audioConfigChanged_l(configEvent->mEvent, configEvent->mParam);
+ audioConfigChanged_l(configEvent.mEvent, configEvent.mParam);
mAudioFlinger->mLock.unlock();
- delete configEvent;
mLock.lock();
}
mLock.unlock();
@@ -1130,7 +1129,7 @@ status_t AudioFlinger::ThreadBase::dumpBase(int fd, const Vector<String16>& args
snprintf(buffer, SIZE, " Index event param\n");
result.append(buffer);
for (size_t i = 0; i < mConfigEvents.size(); i++) {
- snprintf(buffer, SIZE, " %02d %02d %d\n", i, mConfigEvents[i]->mEvent, mConfigEvents[i]->mParam);
+ snprintf(buffer, SIZE, " %02d %02d %d\n", i, mConfigEvents[i].mEvent, mConfigEvents[i].mParam);
result.append(buffer);
}
result.append("\n");
diff --git a/services/audioflinger/AudioFlinger.h b/services/audioflinger/AudioFlinger.h
index 6cafa7e..25c60c7 100644
--- a/services/audioflinger/AudioFlinger.h
+++ b/services/audioflinger/AudioFlinger.h
@@ -547,7 +547,7 @@ private:
Condition mParamCond;
Vector<String8> mNewParameters;
status_t mParamStatus;
- Vector<ConfigEvent *> mConfigEvents;
+ Vector<ConfigEvent> mConfigEvents;
bool mStandby;
int mId;
bool mExiting;