OSDN Git Service

audioflinger: improve record start and thread exit
authorEric Laurent <elaurent@google.com>
Mon, 24 Sep 2012 22:02:17 +0000 (15:02 -0700)
committerAndroid (Google) Code Review <android-gerrit@google.com>
Tue, 25 Sep 2012 16:40:00 +0000 (09:40 -0700)
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

index 8e950aa..dd491f5 100644 (file)
@@ -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();