diff options
author | Glenn Kasten <gkasten@google.com> | 2014-06-16 10:25:20 -0700 |
---|---|---|
committer | Glenn Kasten <gkasten@google.com> | 2014-06-16 12:09:10 -0700 |
commit | 3d61bc1ffc8afc8d7be3b0d4205c9b5ba6daf2e8 (patch) | |
tree | b0a9ce2217ffecdaa12bdf808e336f2e53aa8d50 /services/audioflinger | |
parent | 0ac53364b79dc72ee0c09f0efc46a22ab4374dbf (diff) | |
download | frameworks_av-3d61bc1ffc8afc8d7be3b0d4205c9b5ba6daf2e8.zip frameworks_av-3d61bc1ffc8afc8d7be3b0d4205c9b5ba6daf2e8.tar.gz frameworks_av-3d61bc1ffc8afc8d7be3b0d4205c9b5ba6daf2e8.tar.bz2 |
Fix deadlock
Bug: 15591052
Change-Id: I76154e1640646d2ae8fae65e163e1f3ed1be17dc
Diffstat (limited to 'services/audioflinger')
-rw-r--r-- | services/audioflinger/Threads.cpp | 13 |
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 |