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

Commit 473fad9a authored by Yin-Chia Yeh's avatar Yin-Chia Yeh
Browse files

Camera: fix deadlock

Do not hold request lock while executing client callback.

Bug: 28821274
Change-Id: Ibbdae7f892a54abd0b6d87d2295e9863983e1cf7
parent d4c4d224
Loading
Loading
Loading
Loading
+19 −10
Original line number Diff line number Diff line
@@ -2967,18 +2967,27 @@ void Camera3Device::overrideResultForPrecaptureCancel(
}

void Camera3Device::RequestThread::checkAndStopRepeatingRequest() {
    bool surfaceAbandoned = false;
    int64_t lastFrameNumber = 0;
    {
        Mutex::Autolock l(mRequestLock);
        // Check all streams needed by repeating requests are still valid. Otherwise, stop
        // repeating requests.
        for (const auto& request : mRepeatingRequests) {
            for (const auto& s : request->mOutputStreams) {
                if (s->isAbandoned()) {
                int64_t lastFrameNumber = 0;
                    surfaceAbandoned = true;
                    clearRepeatingRequestsLocked(&lastFrameNumber);
                mListener->notifyRepeatingRequestError(lastFrameNumber);
                return;
                    break;
                }
            }
            if (surfaceAbandoned) {
                break;
            }
        }
    }
    if (surfaceAbandoned) {
        mListener->notifyRepeatingRequestError(lastFrameNumber);
    }
}