summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGlenn Kasten <gkasten@google.com>2012-07-16 15:56:57 -0700
committerGlenn Kasten <gkasten@google.com>2012-07-20 12:33:33 -0700
commit33e6e35b03a726e35203e97550f32154c91d5f13 (patch)
tree2648568f97f1b3f13335a044d267caa15d1d4e78
parentcd2d61016527bf48bd2e9a920bb3fdbb875eb3e4 (diff)
downloadframeworks_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.cpp9
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();