diff --git a/projects/clr/opencl/amdocl/cl_event.cpp b/projects/clr/opencl/amdocl/cl_event.cpp index 1dd1823d04..e1263ae111 100644 --- a/projects/clr/opencl/amdocl/cl_event.cpp +++ b/projects/clr/opencl/amdocl/cl_event.cpp @@ -377,11 +377,17 @@ RUNTIME_ENTRY(cl_int, clSetEventCallback, return CL_INVALID_VALUE; } - if (!as_amd(event)->setCallback(command_exec_callback_type, pfn_notify, user_data)) { + amd::Event* ev = as_amd(event); + ev->retain(); + + if (!ev->setCallback(command_exec_callback_type, pfn_notify, user_data)) { + ev->release(); return CL_OUT_OF_HOST_MEMORY; } - - as_amd(event)->notifyCmdQueue(); + if (ev->status() > CL_COMPLETE) { + ev->notifyCmdQueue(); + } + ev->release(); return CL_SUCCESS; }