From b6ba2fd0d61a4844c153e17843fbe2c841c4bf57 Mon Sep 17 00:00:00 2001 From: Eric Laurent Date: Mon, 24 Sep 2012 15:02:17 -0700 Subject: [PATCH] audioflinger: improve record start and thread exit Use broadcast() instead of signal() on the thread wake up condition when starting record or requesting thread exit to make sure that if another thread is waiting for the same condition (e.g binder thread calling setParameters()) the mixer thread will be woken up. Bug 7184317. Change-Id: I3154a4509ca7af6ffae5236e522b0fab8e75ed06 --- services/audioflinger/AudioFlinger.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/services/audioflinger/AudioFlinger.cpp b/services/audioflinger/AudioFlinger.cpp index 8e950aa5e1..dd491f5ef8 100644 --- a/services/audioflinger/AudioFlinger.cpp +++ b/services/audioflinger/AudioFlinger.cpp @@ -1175,7 +1175,7 @@ void AudioFlinger::ThreadBase::exit() // } AutoMutex lock(mLock); requestExit(); - mWaitWorkCV.signal(); + mWaitWorkCV.broadcast(); } // When Thread::requestExitAndWait is made virtual and this method is renamed to // "virtual status_t requestExitAndWait()", replace by "return Thread::requestExitAndWait();" @@ -6323,7 +6323,7 @@ status_t AudioFlinger::RecordThread::start(RecordThread::RecordTrack* recordTrac mActiveTrack->mState = TrackBase::RESUMING; // signal thread to start ALOGV("Signal record thread"); - mWaitWorkCV.signal(); + mWaitWorkCV.broadcast(); // do not wait for mStartStopCond if exiting if (exitPending()) { mActiveTrack.clear(); -- 2.11.0