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