summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGlenn Kasten <gkasten@google.com>2014-06-16 10:25:20 -0700
committerGlenn Kasten <gkasten@google.com>2014-06-16 12:09:10 -0700
commit3d61bc1ffc8afc8d7be3b0d4205c9b5ba6daf2e8 (patch)
treeb0a9ce2217ffecdaa12bdf808e336f2e53aa8d50
parent0ac53364b79dc72ee0c09f0efc46a22ab4374dbf (diff)
downloadframeworks_av-3d61bc1ffc8afc8d7be3b0d4205c9b5ba6daf2e8.zip
frameworks_av-3d61bc1ffc8afc8d7be3b0d4205c9b5ba6daf2e8.tar.gz
frameworks_av-3d61bc1ffc8afc8d7be3b0d4205c9b5ba6daf2e8.tar.bz2
Fix deadlock
Bug: 15591052 Change-Id: I76154e1640646d2ae8fae65e163e1f3ed1be17dc
-rw-r--r--services/audioflinger/Threads.cpp13
1 files changed, 8 insertions, 5 deletions
diff --git a/services/audioflinger/Threads.cpp b/services/audioflinger/Threads.cpp
index d6333be..d22212b 100644
--- a/services/audioflinger/Threads.cpp
+++ b/services/audioflinger/Threads.cpp
@@ -5137,7 +5137,7 @@ reacquire_wakelock:
sleepUs = kRecordThreadSleepUs;
}
if (framesRead <= 0) {
- continue;
+ goto unlock;
}
ALOG_ASSERT(framesRead > 0);
@@ -5145,10 +5145,12 @@ reacquire_wakelock:
(void) mTeeSink->write(&mRsmpInBuffer[rear * mChannelCount], framesRead);
}
// If destination is non-contiguous, we now correct for reading past end of buffer.
- size_t part1 = mRsmpInFramesP2 - rear;
- if ((size_t) framesRead > part1) {
- memcpy(mRsmpInBuffer, &mRsmpInBuffer[mRsmpInFramesP2 * mChannelCount],
- (framesRead - part1) * mFrameSize);
+ {
+ size_t part1 = mRsmpInFramesP2 - rear;
+ if ((size_t) framesRead > part1) {
+ memcpy(mRsmpInBuffer, &mRsmpInBuffer[mRsmpInFramesP2 * mChannelCount],
+ (framesRead - part1) * mFrameSize);
+ }
}
rear = mRsmpInRear += framesRead;
@@ -5356,6 +5358,7 @@ reacquire_wakelock:
}
+unlock:
// enable changes in effect chain
unlockEffectChains(effectChains);
// effectChains doesn't need to be cleared, since it is cleared by destructor at scope end