diff options
| author | Glenn Kasten <gkasten@google.com> | 2012-07-16 15:56:57 -0700 |
|---|---|---|
| committer | Glenn Kasten <gkasten@google.com> | 2012-07-20 12:33:33 -0700 |
| commit | 33e6e35b03a726e35203e97550f32154c91d5f13 (patch) | |
| tree | 2648568f97f1b3f13335a044d267caa15d1d4e78 | |
| parent | cd2d61016527bf48bd2e9a920bb3fdbb875eb3e4 (diff) | |
| download | frameworks_av-33e6e35b03a726e35203e97550f32154c91d5f13.zip frameworks_av-33e6e35b03a726e35203e97550f32154c91d5f13.tar.gz frameworks_av-33e6e35b03a726e35203e97550f32154c91d5f13.tar.bz2 | |
Miscellaneous audio record fixes
Call AudioSystem::stopInput() if exitPending() after wait() returns.
Acquire lock before clearing mActiveThread.
Change-Id: Ia55e4c4b3accc65ad5479cbdc094fd919152af9f
| -rw-r--r-- | services/audioflinger/AudioFlinger.cpp | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/services/audioflinger/AudioFlinger.cpp b/services/audioflinger/AudioFlinger.cpp index 0730492..ffb00e7 100644 --- a/services/audioflinger/AudioFlinger.cpp +++ b/services/audioflinger/AudioFlinger.cpp @@ -6120,9 +6120,12 @@ bool AudioFlinger::RecordThread::threadLoop() if (!mStandby) { mInput->stream->common.standby(&mInput->stream->common); } - mActiveTrack.clear(); - mStartStopCond.broadcast(); + { + Mutex::Autolock _l(mLock); + mActiveTrack.clear(); + mStartStopCond.broadcast(); + } releaseWakeLock(); @@ -6298,7 +6301,7 @@ void AudioFlinger::RecordThread::stop(RecordThread::RecordTrack* recordTrack) { } mStartStopCond.wait(mLock); // if we have been restarted, recordTrack == mActiveTrack.get() here - if (mActiveTrack == 0 || recordTrack != mActiveTrack.get()) { + if (exitPending() || mActiveTrack == 0 || recordTrack != mActiveTrack.get()) { mLock.unlock(); AudioSystem::stopInput(mId); mLock.lock(); |
