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

Commit 0765e026 authored by Ravneet's avatar Ravneet Committed by Ravneet Dhanjal
Browse files

Camera: Fix FD leak

- To prevent leaking of duplicated FD, use original
FD in syncTimestampToDisplayLocked and duplicate when
used

Test: CTS test
Bug: 290155485
Change-Id: I8d4f4b623aec9e731862f9789f940e339edd10dc
parent a7afbea7
Loading
Loading
Loading
Loading
+4 −4
Original line number Diff line number Diff line
@@ -486,7 +486,7 @@ status_t Camera3OutputStream::returnBufferCheckedLocked(
            bufferDeferred = true;
        } else {
            nsecs_t presentTime = mSyncToDisplay ?
                    syncTimestampToDisplayLocked(captureTime, releaseFence->dup()) : captureTime;
                    syncTimestampToDisplayLocked(captureTime, releaseFence) : captureTime;

            setTransform(transform, true/*mayChangeMirror*/);
            res = native_window_set_buffers_timestamp(mConsumer.get(), presentTime);
@@ -1410,7 +1410,7 @@ void Camera3OutputStream::returnPrefetchedBuffersLocked() {
    }
}

nsecs_t Camera3OutputStream::syncTimestampToDisplayLocked(nsecs_t t, int releaseFence) {
nsecs_t Camera3OutputStream::syncTimestampToDisplayLocked(nsecs_t t, sp<Fence> releaseFence) {
    nsecs_t currentTime = systemTime();
    if (!mFixedFps) {
        mLastCaptureTime = t;
@@ -1458,8 +1458,8 @@ nsecs_t Camera3OutputStream::syncTimestampToDisplayLocked(nsecs_t t, int release
                mRefVsyncData = vsyncEventData;
                mReferenceCaptureTime = t;
                mReferenceArrivalTime = currentTime;
                if (releaseFence != -1) {
                    mReferenceFrameFence = new Fence(releaseFence);
                if (releaseFence->isValid()) {
                    mReferenceFrameFence = new Fence(releaseFence->dup());
                } else {
                    mFenceSignalOffset = 0;
                }
+1 −1
Original line number Diff line number Diff line
@@ -446,7 +446,7 @@ class Camera3OutputStream :
    static constexpr nsecs_t kTimelineThresholdNs = 1000000LL; // 1 millisecond
    static constexpr float kMaxIntervalRatioDeviation = 0.05f;
    static constexpr int kMaxTimelines = 2;
    nsecs_t syncTimestampToDisplayLocked(nsecs_t t, int releaseFence);
    nsecs_t syncTimestampToDisplayLocked(nsecs_t t, sp<Fence> releaseFence);

    // In case of fence being used
    sp<Fence> mReferenceFrameFence;