diff options
author | Glenn Kasten <gkasten@google.com> | 2011-12-13 11:50:00 -0800 |
---|---|---|
committer | Glenn Kasten <gkasten@google.com> | 2011-12-15 12:51:52 -0800 |
commit | f3990f2cc8fd824ae52a880a7b22248e1bdfb192 (patch) | |
tree | e411cbecc6eb0511a485844e1827a5b4aa770d81 /services | |
parent | eebeceec684a36222b4559e3157b0db04c0a67ed (diff) | |
download | frameworks_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.cpp | 13 | ||||
-rw-r--r-- | services/audioflinger/AudioFlinger.h | 2 |
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; |