summaryrefslogtreecommitdiffstats
path: root/services/audioflinger
diff options
context:
space:
mode:
authorGlenn Kasten <gkasten@google.com>2013-07-17 09:08:51 -0700
committerGlenn Kasten <gkasten@google.com>2013-07-17 16:38:58 -0700
commitc6ae3c8a261794fd4445e4e152d1ada074a3f92f (patch)
treec8f6493eb0a0f6af812ea5909096cf91818fce05 /services/audioflinger
parentee5e8d3e8dc61f8fb1fa725278d63802074c10c5 (diff)
downloadframeworks_av-c6ae3c8a261794fd4445e4e152d1ada074a3f92f.zip
frameworks_av-c6ae3c8a261794fd4445e4e152d1ada074a3f92f.tar.gz
frameworks_av-c6ae3c8a261794fd4445e4e152d1ada074a3f92f.tar.bz2
Fix theoretical memory leak in mConfigEvents
Change-Id: I137f70676c8919661e716c33e0dd9c25c2b6285c
Diffstat (limited to 'services/audioflinger')
-rw-r--r--services/audioflinger/Threads.cpp6
-rw-r--r--services/audioflinger/Threads.h1
2 files changed, 7 insertions, 0 deletions
diff --git a/services/audioflinger/Threads.cpp b/services/audioflinger/Threads.cpp
index ef109af..d4cd0ea 100644
--- a/services/audioflinger/Threads.cpp
+++ b/services/audioflinger/Threads.cpp
@@ -282,6 +282,12 @@ AudioFlinger::ThreadBase::ThreadBase(const sp<AudioFlinger>& audioFlinger, audio
AudioFlinger::ThreadBase::~ThreadBase()
{
+ // mConfigEvents should be empty, but just in case it isn't, free the memory it owns
+ for (size_t i = 0; i < mConfigEvents.size(); i++) {
+ delete mConfigEvents[i];
+ }
+ mConfigEvents.clear();
+
mParamCond.broadcast();
// do not lock the mutex in destructor
releaseWakeLock_l();
diff --git a/services/audioflinger/Threads.h b/services/audioflinger/Threads.h
index e15d98a..365c790 100644
--- a/services/audioflinger/Threads.h
+++ b/services/audioflinger/Threads.h
@@ -290,6 +290,7 @@ protected:
Vector<String8> mNewParameters;
status_t mParamStatus;
+ // vector owns each ConfigEvent *, so must delete after removing
Vector<ConfigEvent *> mConfigEvents;
// These fields are written and read by thread itself without lock or barrier,