From 7954c4642591fef4ee880411ed29dc1f344f1b6f Mon Sep 17 00:00:00 2001 From: Eric Laurent Date: Fri, 28 Aug 2009 10:39:03 -0700 Subject: Fix issue 2085690: AudioFlinger must properly terminate the input and output threads when destroyed. Call closeInput() for all inputs and closeOutput() for all outputs before deleting audio hardware in AudioFlinger destructor. --- libs/audioflinger/AudioFlinger.cpp | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) (limited to 'libs/audioflinger/AudioFlinger.cpp') diff --git a/libs/audioflinger/AudioFlinger.cpp b/libs/audioflinger/AudioFlinger.cpp index 77a126c..3a419b5 100644 --- a/libs/audioflinger/AudioFlinger.cpp +++ b/libs/audioflinger/AudioFlinger.cpp @@ -136,8 +136,17 @@ AudioFlinger::AudioFlinger() AudioFlinger::~AudioFlinger() { - mRecordThreads.clear(); - mPlaybackThreads.clear(); + while (!mRecordThreads.isEmpty()) { + // closeInput() will remove first entry from mRecordThreads + closeInput(mRecordThreads.keyAt(0)); + } + while (!mPlaybackThreads.isEmpty()) { + // closeOutput() will remove first entry from mPlaybackThreads + closeOutput(mPlaybackThreads.keyAt(0)); + } + if (mAudioHardware) { + delete mAudioHardware; + } } -- cgit v1.1