diff --git a/MagickCore/opencl.c b/MagickCore/opencl.c
index 197b87b..ca92c77 100644
--- a/MagickCore/opencl.c
+++ b/MagickCore/opencl.c
@@ -433,23 +433,6 @@
   return(signature);
 }
 
-static MagickCLCacheInfo DestroyMagickCLCacheInfo(MagickCLCacheInfo info)
-{
-  ssize_t
-    i;
-
-  for (i=0; i < (ssize_t) info->event_count; i++)
-    openCL_library->clReleaseEvent(info->events[i]);
-  info->events=RelinquishMagickMemory(info->events);
-  if (info->buffer != (cl_mem) NULL)
-    {
-      openCL_library->clReleaseMemObject(info->buffer);
-      info->buffer=(cl_mem) NULL;
-    }
-  ReleaseOpenCLDevice(info->device);
-  return((MagickCLCacheInfo) RelinquishMagickMemory(info));
-}
-
 /*
   Provide call to OpenCL library methods
 */
@@ -2705,10 +2688,26 @@
 %    o relinquish_pixels: the pixels will be relinquish when set to true.
 %
 */
+static void DestroyMagickCLCacheInfo(MagickCLCacheInfo info)
+{
+  ssize_t
+    i;
 
-static void CL_API_CALL DestroyMagickCLCacheInfoDelayed(
-  cl_event magick_unused(event),cl_int magick_unused(event_command_exec_status),
-  void *user_data)
+  for (i=0; i < (ssize_t) info->event_count; i++)
+    openCL_library->clReleaseEvent(info->events[i]);
+  info->events=RelinquishMagickMemory(info->events);
+  if (info->buffer != (cl_mem) NULL)
+    {
+      openCL_library->clReleaseMemObject(info->buffer);
+      info->buffer=(cl_mem) NULL;
+    }
+  ReleaseOpenCLDevice(info->device);
+  RelinquishMagickMemory(info);
+}
+
+static void CL_API_CALL DestroyMagickCLCacheInfoAndPixels(
+  cl_event magick_unused(event),
+  cl_int magick_unused(event_command_exec_status),void *user_data)
 {
   MagickCLCacheInfo
     info;
@@ -2726,9 +2725,14 @@
 {
   if (info == (MagickCLCacheInfo) NULL)
     return((MagickCLCacheInfo) NULL);
-  if (relinquish_pixels)
-    openCL_library->clSetEventCallback(info->events[info->event_count-1],
-      CL_COMPLETE,&DestroyMagickCLCacheInfoDelayed,info);
+  if (relinquish_pixels != MagickFalse)
+    {
+      if (info->event_count > 0)
+        openCL_library->clSetEventCallback(info->events[info->event_count-1],
+          CL_COMPLETE,&DestroyMagickCLCacheInfoAndPixels,info);
+      else
+        DestroyMagickCLCacheInfoAndPixels((cl_event) NULL,0,info);
+    }
   else
     DestroyMagickCLCacheInfo(info);
   return((MagickCLCacheInfo) NULL);
