RecordProfileData will return true when the commands have finished to make sure we don't store them.
diff --git a/MagickCore/opencl.c b/MagickCore/opencl.c
index 8d8908c..462320f 100644
--- a/MagickCore/opencl.c
+++ b/MagickCore/opencl.c
@@ -1636,10 +1636,12 @@
         "clEnqueueNDRangeKernel failed.","'%s'",".");
       return(MagickFalse);
     }
-  RegisterCacheEvent(input_info->opencl,event);
-  if (output_info != (CacheInfo *) NULL)
-    RegisterCacheEvent(output_info->opencl,event);
-  RecordProfileData(input_info->opencl->device,kernel,event);
+  if (RecordProfileData(input_info->opencl->device,kernel,event) == MagickFalse)
+    {
+      RegisterCacheEvent(input_info->opencl,event);
+      if (output_info != (CacheInfo *) NULL)
+        RegisterCacheEvent(output_info->opencl,event);
+    }
   openCL_library->clReleaseEvent(event);
   return(MagickTrue);
 }
@@ -2538,7 +2540,7 @@
 %
 */
 
-MagickPrivate void RecordProfileData(MagickCLDevice device,
+MagickPrivate MagickBooleanType RecordProfileData(MagickCLDevice device,
   cl_kernel kernel,cl_event event)
 {
   char
@@ -2560,16 +2562,20 @@
     length;
 
   if (device->profile_kernels == MagickFalse)
-    return;
+    return(MagickFalse);
+  status=openCL_library->clWaitForEvents(1,&event);
+  if (status != CL_SUCCESS)
+    return(MagickFalse);
   status=openCL_library->clGetKernelInfo(kernel,CL_KERNEL_FUNCTION_NAME,0,NULL,
     &length);
   if (status != CL_SUCCESS)
-    return;
+    return(MagickTrue);
   name=AcquireQuantumMemory(length,sizeof(*name));
+  if (name == (char *) NULL)
+    return(MagickTrue);
+  start=end=elapsed=0;
   status=openCL_library->clGetKernelInfo(kernel,CL_KERNEL_FUNCTION_NAME,length,
     name,(size_t *) NULL);
-  start=end=elapsed=0;
-  status|=openCL_library->clWaitForEvents(1,&event);
   status|=openCL_library->clGetEventProfilingInfo(event,
     CL_PROFILING_COMMAND_START,sizeof(cl_ulong),&start,NULL);
   status|=openCL_library->clGetEventProfilingInfo(event,
@@ -2577,7 +2583,7 @@
   if (status != CL_SUCCESS)
     {
       name=DestroyString(name);
-      return;
+      return(MagickTrue);
     }
   start/=1000; // usecs
   end/=1000;   // usecs
@@ -2587,7 +2593,7 @@
   profile_record=(KernelProfileRecord) NULL;
   if (device->profile_records != (KernelProfileRecord *) NULL)
     {
-      while (device->profile_records[i] != ((KernelProfileRecord) NULL))
+      while (device->profile_records[i] != (KernelProfileRecord) NULL)
       {
         if (LocaleCompare(device->profile_records[i]->kernel_name,name) == 0)
           {
@@ -2597,11 +2603,13 @@
         i++;
       }
     }
-  if (profile_record == (KernelProfileRecord) NULL)
+  if (profile_record != (KernelProfileRecord) NULL)
+    name=DestroyString(name);
+  else
     {
       profile_record=AcquireMagickMemory(sizeof(*profile_record));
       (void) ResetMagickMemory(profile_record,0,sizeof(*profile_record));
-      profile_record->kernel_name=AcquireString(name);
+      profile_record->kernel_name=name;
       device->profile_records=ResizeMagickMemory(device->profile_records,(i+2)*
         sizeof(*device->profile_records));
       device->profile_records[i]=profile_record;
@@ -2614,7 +2622,7 @@
   profile_record->total+=elapsed;
   profile_record->count+=1;
   UnlockSemaphoreInfo(device->lock);
-  name=DestroyString(name);
+  return(MagickTrue);
 }
 
 /*