diff --git a/src/c_wrapper/event.cpp b/src/c_wrapper/event.cpp
index 5b7eb3af637d731357e5a5943f86d15ddb480448..e53bb0a51888a46d7f9fa439bea12d118c6b302f 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) {