From d9d97fabe894348c014e5b6861c0fb13d84f8bee Mon Sep 17 00:00:00 2001
From: Yichao Yu <yyc1992@gmail.com>
Date: Sun, 22 Jun 2014 13:45:19 +0800
Subject: [PATCH] check cb availability only when needed

---
 pyopencl/cffi_cl.py     | 11 -----------
 src/c_wrapper/context.h |  2 +-
 src/c_wrapper/event.cpp |  8 +++++++-
 3 files changed, 8 insertions(+), 13 deletions(-)

diff --git a/pyopencl/cffi_cl.py b/pyopencl/cffi_cl.py
index 3aefa690..d1fc6bee 100644
--- a/pyopencl/cffi_cl.py
+++ b/pyopencl/cffi_cl.py
@@ -918,17 +918,6 @@ class Kernel(_Common):
 class Event(_Common):
     _id = 'event'
 
-    @classmethod
-    def _create(cls, ptr):
-        self = _Common._create.__func__(cls, ptr)
-        try:
-            if (self.context._get_cl_version() >= (1, 1) and
-                get_cl_header_version() >= (1, 1)):
-                _lib.event__set_support_cb(ptr, 1);
-        except:
-            pass
-        return self
-
     def __init__(self):
         pass
 
diff --git a/src/c_wrapper/context.h b/src/c_wrapper/context.h
index 3ae4098c..323381de 100644
--- a/src/c_wrapper/context.h
+++ b/src/c_wrapper/context.h
@@ -16,7 +16,7 @@ extern template void print_buf<cl_context>(std::ostream&, const cl_context*,
 class context : public clobj<cl_context> {
 public:
     PYOPENCL_DEF_CL_CLASS(CONTEXT);
-    void get_version(cl_context ctx, int *major, int *minor);
+    static void get_version(cl_context ctx, int *major, int *minor);
     PYOPENCL_INLINE
     context(cl_context ctx, bool retain)
         : clobj(ctx)
diff --git a/src/c_wrapper/event.cpp b/src/c_wrapper/event.cpp
index f74d6e2c..a8f03438 100644
--- a/src/c_wrapper/event.cpp
+++ b/src/c_wrapper/event.cpp
@@ -64,7 +64,13 @@ release_private_use_cb(event *evt)
         // is already completed.
         if (status <= CL_COMPLETE)
             return false;
-        return evt->support_cb;
+        cl_context ctx;
+        pyopencl_call_guarded(clGetEventInfo, evt, CL_EVENT_CONTEXT,
+                              size_arg(ctx), nullptr);
+        int major;
+        int minor;
+        context::get_version(ctx, &major, &minor);
+        return (major > 1) || (major >= 1 && minor >= 1);
     } catch (const clerror &e) {
         cleanup_print_error(e.code(), e.what());
         return false;
-- 
GitLab