From 5c3debecf4d1156d6b01d317ab2a5910704d8797 Mon Sep 17 00:00:00 2001 From: Hayodea Hekol Date: Thu, 13 Nov 2025 01:41:59 -0400 Subject: [PATCH] OClCollMeshEngn: fix mem leak in [un]mapBuffer() --- .../openClCollatingAndMeshingEngine.cpp | 29 +++++++++++++++---- 1 file changed, 23 insertions(+), 6 deletions(-) diff --git a/stimBuffApis/livoxGen1/openClCollatingAndMeshingEngine.cpp b/stimBuffApis/livoxGen1/openClCollatingAndMeshingEngine.cpp index 0698eb5..2a82cf1 100644 --- a/stimBuffApis/livoxGen1/openClCollatingAndMeshingEngine.cpp +++ b/stimBuffApis/livoxGen1/openClCollatingAndMeshingEngine.cpp @@ -747,20 +747,22 @@ bool OpenClCollatingAndMeshingEngine::mapBuffer( if (mappedPtr != nullptr) { return true; } cl_int err; - cl_event mapEvent; mappedPtr = clEnqueueMapBuffer( commandQueue, buffer, CL_TRUE, mapFlags, - 0, size, 0, nullptr, &mapEvent, &err); + 0, size, 0, nullptr, nullptr, &err); if (err != CL_SUCCESS || !mappedPtr) { std::cerr << __func__ << ": failed to map buffer: " << err << std::endl; - mappedPtr = nullptr; - return false; + goto cleanup; } return true; + +cleanup: + mappedPtr = nullptr; + return false; } bool OpenClCollatingAndMeshingEngine::unmapBuffer(cl_mem buffer, void*& mappedPtr) @@ -778,7 +780,7 @@ bool OpenClCollatingAndMeshingEngine::unmapBuffer(cl_mem buffer, void*& mappedPt } cl_int err; - cl_event unmapEvent; + cl_event unmapEvent = nullptr; err = clEnqueueUnmapMemObject( commandQueue, buffer, mappedPtr, 0, nullptr, &unmapEvent); @@ -787,11 +789,26 @@ bool OpenClCollatingAndMeshingEngine::unmapBuffer(cl_mem buffer, void*& mappedPt { std::cerr << __func__ << ": failed to unmap buffer: " << err << std::endl; - return false; + goto cleanup; } + // Wait for unmap to complete and release the event + err = clWaitForEvents(1, &unmapEvent); + if (err != CL_SUCCESS) + { + std::cerr << __func__ << ": failed to wait for unmap event: " << err + << std::endl; + goto cleanup_unmapEvent; + } + + clReleaseEvent(unmapEvent); mappedPtr = nullptr; return true; + +cleanup_unmapEvent: + clReleaseEvent(unmapEvent); +cleanup: + return false; } bool OpenClCollatingAndMeshingEngine::mapAssemblyBuffer(cl_map_flags mapFlags)