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; }
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)