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

Commit c7263fb4 authored by Taiju Tsuiki's avatar Taiju Tsuiki
Browse files

Close Fence FDs in error cases of Surface and GraphicBufferMapper

Surface::{cancel,queue}Buffer and GraphicBufferMapper::lockAsyncYCbCr take the
ownership of |fenceFd|s. Though they don't close it on error cases.

Change-Id: I49a7ce8837d5c510c4ac4ad4649f310d18610e80
parent de5c15b8
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -267,6 +267,9 @@ int Surface::cancelBuffer(android_native_buffer_t* buffer,
    Mutex::Autolock lock(mMutex);
    int i = getSlotFromBufferLocked(buffer);
    if (i < 0) {
        if (fenceFd >= 0) {
            close(fenceFd);
        }
        return i;
    }
    sp<Fence> fence(fenceFd >= 0 ? new Fence(fenceFd) : Fence::NO_FENCE);
@@ -308,6 +311,9 @@ int Surface::queueBuffer(android_native_buffer_t* buffer, int fenceFd) {
    }
    int i = getSlotFromBufferLocked(buffer);
    if (i < 0) {
        if (fenceFd >= 0) {
            close(fenceFd);
        }
        return i;
    }

+3 −0
Original line number Diff line number Diff line
@@ -160,6 +160,9 @@ status_t GraphicBufferMapper::lockAsyncYCbCr(buffer_handle_t handle,
                bounds.left, bounds.top, bounds.width(), bounds.height(),
                ycbcr);
    } else {
        if (fenceFd >= 0) {
            close(fenceFd);
        }
        return -EINVAL; // do not log failure
    }