From 540e17d3d41e16e179aee4fe352af99d78ff343b Mon Sep 17 00:00:00 2001 From: Yichao Yu <yyc1992@gmail.com> Date: Sat, 21 Jun 2014 08:55:15 +0800 Subject: [PATCH] use thread in clean up --- src/c_wrapper/event.cpp | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/src/c_wrapper/event.cpp b/src/c_wrapper/event.cpp index 5b7eb3af..e53bb0a5 100644 --- a/src/c_wrapper/event.cpp +++ b/src/c_wrapper/event.cpp @@ -60,13 +60,18 @@ event::release_private() noexcept } #if PYOPENCL_CL_VERSION >= 0x1010 if (support_cb) { - pyopencl_call_guarded_cleanup( - clSetEventCallback, this, CL_COMPLETE, - [] (cl_event, cl_int, void *data) { - event_private *p = static_cast<event_private*>(data); + try { + event_private *p = m_p; + set_callback(CL_COMPLETE, [p] (cl_int) { p->call_finish(); delete p; - }, (void*)m_p); + }); + } catch (const clerror &e) { + std::cerr + << ("PyOpenCL WARNING: a clean-up operation failed " + "(dead context maybe?)") << std::endl + << e.what() << " failed with code " << e.code() << std::endl; + } } else { #endif std::thread t([] (cl_event evt, event_private *p) { -- GitLab