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