diff options
-rw-r--r-- | services/audioflinger/Threads.cpp | 6 | ||||
-rw-r--r-- | services/audioflinger/Threads.h | 1 |
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, |