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

Commit e6d42378 authored by Treehugger Robot's avatar Treehugger Robot Committed by Automerger Merge Worker
Browse files

Merge "ExternalCameraHAL: Prevent memory leak when manipulating native_handle"...

Merge "ExternalCameraHAL: Prevent memory leak when manipulating native_handle" into main am: 2fa41a80

Original change: https://android-review.googlesource.com/c/platform/hardware/interfaces/+/3011717



Change-Id: Iec7e5c599640a1e5460f0fa84def0807aa3b9eb7
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents 78080405 2fa41a80
Loading
Loading
Loading
Loading
+12 −7
Original line number Diff line number Diff line
@@ -1391,12 +1391,14 @@ Status ExternalCameraDeviceSession::importRequestLockedImpl(

    // All buffers are imported. Now validate output buffer acquire fences
    for (size_t i = 0; i < numOutputBufs; i++) {
        if (!sHandleImporter.importFence(
                    ::android::makeFromAidl(request.outputBuffers[i].acquireFence), allFences[i])) {
        native_handle_t* h = ::android::makeFromAidl(request.outputBuffers[i].acquireFence);
        if (!sHandleImporter.importFence(h, allFences[i])) {
            ALOGE("%s: output buffer %zu acquire fence is invalid", __FUNCTION__, i);
            cleanupInflightFences(allFences, i);
            native_handle_delete(h);
            return Status::INTERNAL_ERROR;
        }
        native_handle_delete(h);
    }
    return Status::OK;
}
@@ -2094,9 +2096,10 @@ bool ExternalCameraDeviceSession::BufferRequestThread::threadLoop() {
                    // TODO: create a batch import API so we don't need to lock/unlock mCbsLock
                    // repeatedly?
                    lk.unlock();
                    Status s =
                            parent->importBuffer(streamId, hBuf.bufferId, makeFromAidl(hBuf.buffer),
                    native_handle_t* h = makeFromAidl(hBuf.buffer);
                    Status s = parent->importBuffer(streamId, hBuf.bufferId, h,
                                                    /*out*/ &mBufferReqs[i].bufPtr);
                    native_handle_delete(h);
                    lk.lock();

                    if (s != Status::OK) {
@@ -2104,12 +2107,14 @@ bool ExternalCameraDeviceSession::BufferRequestThread::threadLoop() {
                        cleanupInflightFences(importedFences, i - 1);
                        return false;
                    }
                    if (!sHandleImporter.importFence(makeFromAidl(hBuf.acquireFence),
                                                     mBufferReqs[i].acquireFence)) {
                    h = makeFromAidl(hBuf.acquireFence);
                    if (!sHandleImporter.importFence(h, mBufferReqs[i].acquireFence)) {
                        ALOGE("%s: stream %d import fence failed!", __FUNCTION__, streamId);
                        cleanupInflightFences(importedFences, i - 1);
                        native_handle_delete(h);
                        return false;
                    }
                    native_handle_delete(h);
                    importedFences[i] = mBufferReqs[i].acquireFence;
                } break;
                default:
+3 −0
Original line number Diff line number Diff line
@@ -111,6 +111,7 @@ Status ExternalCameraOfflineSession::processCaptureResult(std::shared_ptr<HalReq
                native_handle_t* handle = native_handle_create(/*numFds*/ 1, /*numInts*/ 0);
                handle->data[0] = req->buffers[i].acquireFence;
                result.outputBuffers[i].releaseFence = android::dupToAidl(handle);
                native_handle_delete(handle);
            }
            notifyError(req->frameNumber, req->buffers[i].streamId, ErrorCode::ERROR_BUFFER);
        } else {
@@ -120,6 +121,7 @@ Status ExternalCameraOfflineSession::processCaptureResult(std::shared_ptr<HalReq
                native_handle_t* handle = native_handle_create(/*numFds*/ 1, /*numInts*/ 0);
                handle->data[0] = req->buffers[i].acquireFence;
                outputBuffer.releaseFence = android::dupToAidl(handle);
                native_handle_delete(handle);
            }
        }
    }
@@ -248,6 +250,7 @@ Status ExternalCameraOfflineSession::processCaptureRequestError(
            native_handle_t* handle = native_handle_create(/*numFds*/ 1, /*numInts*/ 0);
            handle->data[0] = req->buffers[i].acquireFence;
            outputBuffer.releaseFence = dupToAidl(handle);
            native_handle_delete(handle);
        }
    }