diff --git a/pyopencl/c_wrapper/wrap_cl_core.h b/pyopencl/c_wrapper/wrap_cl_core.h index 458f6c3ace0a90cdc12383bb008503b610e21d7c..594bacd9660e4091ac2fe29c703e33b2ee0aaba1 100644 --- a/pyopencl/c_wrapper/wrap_cl_core.h +++ b/pyopencl/c_wrapper/wrap_cl_core.h @@ -91,6 +91,7 @@ intptr_t _int_ptr(void*, class_t); void* _from_int_ptr(void **ptr_out, intptr_t int_ptr_value, class_t); error *_get_info(void *ptr, class_t class_, cl_uint param, generic_info *out); void _delete(void *ptr, class_t class_); +error *_release_memobj(void* ptr); void pyopencl_free_pointer(void*); void pyopencl_free_pointer_array(void**, uint32_t size); diff --git a/pyopencl/cffi_cl.py b/pyopencl/cffi_cl.py index 3aeb863c9257447476e56225ef020478164b687c..b2cb1ffb8b33656ddc35c8cd883cd78f98404fda 100644 --- a/pyopencl/cffi_cl.py +++ b/pyopencl/cffi_cl.py @@ -435,8 +435,8 @@ class MemoryObjectHolder(_Common): class MemoryObject(MemoryObjectHolder): - pass - + def release(self): + _handle_error(_lib._release_memobj(self.ptr)) def _c_buffer_from_obj(obj, writable=False): """Convert a Python object to a tuple (cdata('void *'), num_bytes, dummy) diff --git a/src/c_wrapper/wrap_cl.cpp b/src/c_wrapper/wrap_cl.cpp index 33619a43b7b035e5bc569da8ef05d8afd705946b..74c47cb8990edf674743a97f7f901c3ce10294b6 100644 --- a/src/c_wrapper/wrap_cl.cpp +++ b/src/c_wrapper/wrap_cl.cpp @@ -3432,7 +3432,6 @@ intptr_t _int_ptr(void* ptr, class_t class_) { SWITCHCLASS(INT_PTR); } - void* _from_int_ptr(void **ptr_out, intptr_t int_ptr_value, class_t class_) { #define FROM_INT_PTR(CLSU, CLS) \ BEGIN_C_HANDLE_ERROR \ @@ -3465,6 +3464,14 @@ void _delete(void *ptr, class_t class_) { SWITCHCLASS(DELETE); } +::error* +_release_memobj(void* ptr) +{ + BEGIN_C_HANDLE_ERROR; + static_cast<pyopencl::memory_object*>(ptr)->release(); + END_C_HANDLE_ERROR; + return NULL; +} int pyopencl_get_cl_version(void) { return PYOPENCL_CL_VERSION;