OClCollMeshEng: Use RAII for unmapBuffer() event destruction

This commit is contained in:
2025-12-07 19:29:20 -04:00
parent 702855a27d
commit 7167cea62c
2 changed files with 17 additions and 11 deletions
@@ -906,35 +906,33 @@ bool OpenClCollatingAndMeshingEngine::unmapBuffer(
}
cl_int err;
cl_event unmapEvent = nullptr;
cl_event rawUnmapEvent = nullptr;
err = clEnqueueUnmapMemObject(
computeDevice->commandQueue, buffer, mappedPtr,
0, nullptr, &unmapEvent);
0, nullptr, &rawUnmapEvent);
if (err != CL_SUCCESS)
{
std::cerr << __func__ << ": failed to unmap buffer: " << err
<< std::endl;
goto cleanup;
return false;
}
// Wrap event in unique_ptr for automatic cleanup
ClEventPtr unmapEvent(rawUnmapEvent);
// Wait for unmap to complete and release the event
err = clWaitForEvents(1, &unmapEvent);
cl_event eventPtr = unmapEvent.get();
err = clWaitForEvents(1, &eventPtr);
if (err != CL_SUCCESS)
{
std::cerr << __func__ << ": failed to wait for unmap event: " << err
<< std::endl;
goto cleanup_unmapEvent;
return false;
}
clReleaseEvent(unmapEvent);
mappedPtr = nullptr;
return true;
cleanup_unmapEvent:
clReleaseEvent(unmapEvent);
cleanup:
return false;
}
bool OpenClCollatingAndMeshingEngine::mapAssemblyBuffer(cl_map_flags mapFlags)
@@ -40,11 +40,19 @@ struct ClKernelDeleter
{ if (kernel) { clReleaseKernel(kernel); } }
};
struct ClEventDeleter
{
void operator()(cl_event event) const
{ if (event) { clReleaseEvent(event); } }
};
// Type aliases for OpenCL handle unique_ptrs
using ClProgramPtr = std::unique_ptr<
std::remove_pointer_t<cl_program>, ClProgramDeleter>;
using ClKernelPtr = std::unique_ptr<
std::remove_pointer_t<cl_kernel>, ClKernelDeleter>;
using ClEventPtr = std::unique_ptr<
std::remove_pointer_t<cl_event>, ClEventDeleter>;
class PcloudStimulusProducer;