summaryrefslogtreecommitdiffstats
path: root/services/audioflinger/Tracks.cpp
diff options
context:
space:
mode:
authorGlenn Kasten <gkasten@google.com>2013-09-12 15:13:44 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2013-09-12 15:13:45 +0000
commitdc33c542351449ceee95cc50a9009f495e7c72ba (patch)
tree0f44c9770a45605876de1e051801bee5781a56ad /services/audioflinger/Tracks.cpp
parentefc4d4899e03fb8464017dd48539106cec2163de (diff)
parent0c72b24f91c68442eb374bd1b338c394105b8262 (diff)
downloadframeworks_av-dc33c542351449ceee95cc50a9009f495e7c72ba.zip
frameworks_av-dc33c542351449ceee95cc50a9009f495e7c72ba.tar.gz
frameworks_av-dc33c542351449ceee95cc50a9009f495e7c72ba.tar.bz2
Merge "Fix AudioTrack shared memory leak" into klp-dev
Diffstat (limited to 'services/audioflinger/Tracks.cpp')
-rw-r--r--services/audioflinger/Tracks.cpp10
1 files changed, 10 insertions, 0 deletions
diff --git a/services/audioflinger/Tracks.cpp b/services/audioflinger/Tracks.cpp
index 821e4a5..3a5dc35 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()