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

Commit 339415e6 authored by Treehugger Robot's avatar Treehugger Robot Committed by Gerrit Code Review
Browse files

Merge "Camera: Account for any pending freed buffers during the offline switch"

parents 2193cd32 ac4c8529
Loading
Loading
Loading
Loading
+20 −0
Original line number Diff line number Diff line
@@ -4091,6 +4091,26 @@ status_t Camera3Device::HalInterface::switchToOffline(
        // Verify buffer caches
        std::vector<uint64_t> bufIds(offlineStream.circulatingBufferIds.begin(),
                offlineStream.circulatingBufferIds.end());
        {
            // Due to timing it is possible that we may not have any remaining pending capture
            // requests that can update the caches on Hal side. This can result in buffer cache
            // mismatch between the service and the Hal and must be accounted for.
            std::lock_guard<std::mutex> l(mFreedBuffersLock);
            for (const auto& it : mFreedBuffers) {
                if (it.first == id) {
                    ALOGV("%s: stream ID %d buffer id %" PRIu64 " cache removal still pending",
                            __FUNCTION__, id, it.second);
                    const auto& cachedEntry = std::find(bufIds.begin(), bufIds.end(), it.second);
                    if (cachedEntry != bufIds.end()) {
                        bufIds.erase(cachedEntry);
                    } else {
                        ALOGE("%s: stream ID %d buffer id %" PRIu64 " cache removal still pending "
                                "however buffer is no longer in the offline stream info!",
                                __FUNCTION__, id, it.second);
                    }
                }
            }
        }
        if (!verifyBufferIds(id, bufIds)) {
            ALOGE("%s: stream ID %d buffer cache records mismatch!", __FUNCTION__, id);
            return UNKNOWN_ERROR;