diff options
author | Glenn Kasten <gkasten@google.com> | 2013-09-11 09:14:16 -0700 |
---|---|---|
committer | Glenn Kasten <gkasten@google.com> | 2013-09-11 12:47:29 -0700 |
commit | 0c72b24f91c68442eb374bd1b338c394105b8262 (patch) | |
tree | d5b7396b593f2157fead8f0c5c41d45c1c236009 /services/audioflinger/Tracks.cpp | |
parent | 6220f993541b0317e6ace3c410dd35a8d76e30bc (diff) | |
download | frameworks_av-0c72b24f91c68442eb374bd1b338c394105b8262.zip frameworks_av-0c72b24f91c68442eb374bd1b338c394105b8262.tar.gz frameworks_av-0c72b24f91c68442eb374bd1b338c394105b8262.tar.bz2 |
Fix AudioTrack shared memory leak
Bug: 2801375
Change-Id: I50e15164fe310f69ea019dca5b49171a02bc6992
Diffstat (limited to 'services/audioflinger/Tracks.cpp')
-rw-r--r-- | services/audioflinger/Tracks.cpp | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/services/audioflinger/Tracks.cpp b/services/audioflinger/Tracks.cpp index 6002aa3..cd54950 100644 --- a/services/audioflinger/Tracks.cpp +++ b/services/audioflinger/Tracks.cpp @@ -364,6 +364,16 @@ AudioFlinger::PlaybackThread::Track::Track( AudioFlinger::PlaybackThread::Track::~Track() { ALOGV("PlaybackThread::Track destructor"); + + // The destructor would clear mSharedBuffer, + // but it will not push the decremented reference count, + // leaving the client's IMemory dangling indefinitely. + // This prevents that leak. + if (mSharedBuffer != 0) { + mSharedBuffer.clear(); + // flush the binder command buffer + IPCThreadState::self()->flushCommands(); + } } void AudioFlinger::PlaybackThread::Track::destroy() |