OClCollMeshEngn: fix mem leak in [un]mapBuffer()

This commit is contained in:
2025-11-13 01:41:59 -04:00
parent e446d42b3c
commit 5c3debecf4
@@ -747,20 +747,22 @@ bool OpenClCollatingAndMeshingEngine::mapBuffer(
if (mappedPtr != nullptr) { return true; } if (mappedPtr != nullptr) { return true; }
cl_int err; cl_int err;
cl_event mapEvent;
mappedPtr = clEnqueueMapBuffer( mappedPtr = clEnqueueMapBuffer(
commandQueue, buffer, CL_TRUE, mapFlags, commandQueue, buffer, CL_TRUE, mapFlags,
0, size, 0, nullptr, &mapEvent, &err); 0, size, 0, nullptr, nullptr, &err);
if (err != CL_SUCCESS || !mappedPtr) if (err != CL_SUCCESS || !mappedPtr)
{ {
std::cerr << __func__ << ": failed to map buffer: " << err std::cerr << __func__ << ": failed to map buffer: " << err
<< std::endl; << std::endl;
mappedPtr = nullptr; goto cleanup;
return false;
} }
return true; return true;
cleanup:
mappedPtr = nullptr;
return false;
} }
bool OpenClCollatingAndMeshingEngine::unmapBuffer(cl_mem buffer, void*& mappedPtr) bool OpenClCollatingAndMeshingEngine::unmapBuffer(cl_mem buffer, void*& mappedPtr)
@@ -778,7 +780,7 @@ bool OpenClCollatingAndMeshingEngine::unmapBuffer(cl_mem buffer, void*& mappedPt
} }
cl_int err; cl_int err;
cl_event unmapEvent; cl_event unmapEvent = nullptr;
err = clEnqueueUnmapMemObject( err = clEnqueueUnmapMemObject(
commandQueue, buffer, mappedPtr, commandQueue, buffer, mappedPtr,
0, nullptr, &unmapEvent); 0, nullptr, &unmapEvent);
@@ -787,11 +789,26 @@ bool OpenClCollatingAndMeshingEngine::unmapBuffer(cl_mem buffer, void*& mappedPt
{ {
std::cerr << __func__ << ": failed to unmap buffer: " << err std::cerr << __func__ << ": failed to unmap buffer: " << err
<< std::endl; << 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; mappedPtr = nullptr;
return true; return true;
cleanup_unmapEvent:
clReleaseEvent(unmapEvent);
cleanup:
return false;
} }
bool OpenClCollatingAndMeshingEngine::mapAssemblyBuffer(cl_map_flags mapFlags) bool OpenClCollatingAndMeshingEngine::mapAssemblyBuffer(cl_map_flags mapFlags)