Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3d61bc1f authored by Glenn Kasten's avatar Glenn Kasten
Browse files

Fix deadlock

Bug: 15591052
Change-Id: I76154e1640646d2ae8fae65e163e1f3ed1be17dc
parent 0ac53364
Loading
Loading
Loading
Loading
+8 −5
Original line number Original line Diff line number Diff line
@@ -5137,7 +5137,7 @@ reacquire_wakelock:
            sleepUs = kRecordThreadSleepUs;
            sleepUs = kRecordThreadSleepUs;
        }
        }
        if (framesRead <= 0) {
        if (framesRead <= 0) {
            continue;
            goto unlock;
        }
        }
        ALOG_ASSERT(framesRead > 0);
        ALOG_ASSERT(framesRead > 0);


@@ -5145,11 +5145,13 @@ reacquire_wakelock:
            (void) mTeeSink->write(&mRsmpInBuffer[rear * mChannelCount], framesRead);
            (void) mTeeSink->write(&mRsmpInBuffer[rear * mChannelCount], framesRead);
        }
        }
        // If destination is non-contiguous, we now correct for reading past end of buffer.
        // If destination is non-contiguous, we now correct for reading past end of buffer.
        {
            size_t part1 = mRsmpInFramesP2 - rear;
            size_t part1 = mRsmpInFramesP2 - rear;
            if ((size_t) framesRead > part1) {
            if ((size_t) framesRead > part1) {
                memcpy(mRsmpInBuffer, &mRsmpInBuffer[mRsmpInFramesP2 * mChannelCount],
                memcpy(mRsmpInBuffer, &mRsmpInBuffer[mRsmpInFramesP2 * mChannelCount],
                        (framesRead - part1) * mFrameSize);
                        (framesRead - part1) * mFrameSize);
            }
            }
        }
        rear = mRsmpInRear += framesRead;
        rear = mRsmpInRear += framesRead;


        size = activeTracks.size();
        size = activeTracks.size();
@@ -5356,6 +5358,7 @@ reacquire_wakelock:


        }
        }


unlock:
        // enable changes in effect chain
        // enable changes in effect chain
        unlockEffectChains(effectChains);
        unlockEffectChains(effectChains);
        // effectChains doesn't need to be cleared, since it is cleared by destructor at scope end
        // effectChains doesn't need to be cleared, since it is cleared by destructor at scope end