From e8b72a6172be8497c836568e639e30b221943794 Mon Sep 17 00:00:00 2001
From: Yichao Yu <yyc1992@gmail.com>
Date: Sun, 22 Jun 2014 11:21:01 +0800
Subject: [PATCH] event release_private_use_cb

---
 src/c_wrapper/event.cpp | 36 ++++++++++++++++++++++--------------
 1 file changed, 22 insertions(+), 14 deletions(-)

diff --git a/src/c_wrapper/event.cpp b/src/c_wrapper/event.cpp
index f577bfdb..f74d6e2c 100644
--- a/src/c_wrapper/event.cpp
+++ b/src/c_wrapper/event.cpp
@@ -51,6 +51,27 @@ event::event(cl_event event, bool retain, event_private *p)
     }
 }
 
+#if PYOPENCL_CL_VERSION >= 0x1010
+static PYOPENCL_INLINE bool
+release_private_use_cb(event *evt)
+{
+    try {
+        cl_int status = 0;
+        pyopencl_call_guarded(clGetEventInfo, evt,
+                              CL_EVENT_COMMAND_EXECUTION_STATUS,
+                              size_arg(status), nullptr);
+        // Event Callback may not be run immediately when the event
+        // is already completed.
+        if (status <= CL_COMPLETE)
+            return false;
+        return evt->support_cb;
+    } catch (const clerror &e) {
+        cleanup_print_error(e.code(), e.what());
+        return false;
+    }
+}
+#endif
+
 bool
 event::release_private() noexcept
 {
@@ -61,20 +82,7 @@ event::release_private() noexcept
         return true;
     }
 #if PYOPENCL_CL_VERSION >= 0x1010
-    cl_int status = 0;
-    try {
-        pyopencl_call_guarded(clGetEventInfo, this,
-                              CL_EVENT_COMMAND_EXECUTION_STATUS,
-                              size_arg(status), nullptr);
-    } catch (const clerror &e) {
-        cleanup_print_error(e.code(), e.what());
-        m_p->call_finish();
-        delete m_p;
-        return true;
-    }
-    // Event Callback may not be run immediately when the event is already
-    // completed.
-    if (support_cb && status > CL_COMPLETE) {
+    if (release_private_use_cb(this)) {
         try {
             event_private *p = m_p;
             set_callback(CL_COMPLETE, [p] (cl_int) {
-- 
GitLab