]> granicus.if.org Git - imagemagick/commitdiff
Added extra lock when creating the OpenCL buffer.
authorDirk Lemstra <dirk@git.imagemagick.org>
Sun, 15 Oct 2017 07:20:08 +0000 (09:20 +0200)
committerDirk Lemstra <dirk@git.imagemagick.org>
Sun, 15 Oct 2017 07:30:30 +0000 (09:30 +0200)
MagickCore/cache.c

index 377157ddfdb1c44fa514304a08b99596c08b6464..585ef8a9df96d7fd4441358e066aec386bf03c3f 100644 (file)
@@ -1157,9 +1157,6 @@ MagickPrivate cl_mem GetAuthenticOpenCLBuffer(const Image *image,
   CacheInfo
     *magick_restrict cache_info;
 
-  cl_int
-    status;
-
   assert(image != (const Image *) NULL);
   assert(device != (const MagickCLDevice) NULL);
   cache_info=(CacheInfo *) image->cache;
@@ -1167,6 +1164,7 @@ MagickPrivate cl_mem GetAuthenticOpenCLBuffer(const Image *image,
     SyncImagePixelCache((Image *) image,exception);
   if ((cache_info->type != MemoryCache) || (cache_info->mapped != MagickFalse))
     return((cl_mem) NULL);
+  LockSemaphoreInfo(cache_info->semaphore);
   if ((cache_info->opencl != (MagickCLCacheInfo) NULL) &&
       (cache_info->opencl->device->context != device->context))
     cache_info->opencl=CopyMagickCLCacheInfo(cache_info->opencl);
@@ -1175,9 +1173,10 @@ MagickPrivate cl_mem GetAuthenticOpenCLBuffer(const Image *image,
       assert(cache_info->pixels != (Quantum *) NULL);
       cache_info->opencl=AcquireMagickCLCacheInfo(device,cache_info->pixels,
         cache_info->length);
-      if (cache_info->opencl == (MagickCLCacheInfo) NULL)
-        return((cl_mem) NULL);
     }
+  UnlockSemaphoreInfo(cache_info->semaphore);
+  if (cache_info->opencl == (MagickCLCacheInfo) NULL)
+    return((cl_mem) NULL);
   assert(cache_info->opencl->pixels == cache_info->pixels);
   return(cache_info->opencl->buffer);
 }
@@ -5019,8 +5018,7 @@ static void CopyOpenCLBuffer(CacheInfo *magick_restrict cache_info)
     Ensure single threaded access to OpenCL environment.
   */
   LockSemaphoreInfo(cache_info->semaphore);
-  cache_info->opencl=(MagickCLCacheInfo) CopyMagickCLCacheInfo(
-    cache_info->opencl);
+  cache_info->opencl=CopyMagickCLCacheInfo(cache_info->opencl);
   UnlockSemaphoreInfo(cache_info->semaphore);
 }