OClCollMeshEngn: fix mem leak in [un]mapBuffer()
This commit is contained in:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user