From: Dirk Lemstra Date: Tue, 27 Mar 2018 21:48:47 +0000 (+0200) Subject: Fixed issue with writing to shared cache. X-Git-Tag: 7.0.7-29~292 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=814ffc9bbdbdbfecf96a9431b88d7a5cf3ea7544;p=imagemagick Fixed issue with writing to shared cache. --- diff --git a/MagickCore/cache-private.h b/MagickCore/cache-private.h index 9891543f0..ba49236c6 100644 --- a/MagickCore/cache-private.h +++ b/MagickCore/cache-private.h @@ -286,7 +286,7 @@ extern MagickPrivate void #if defined(MAGICKCORE_OPENCL_SUPPORT) extern MagickPrivate cl_mem - GetAuthenticOpenCLBuffer(const Image *,MagickCLDevice,ExceptionInfo *); + GetAuthenticOpenCLBuffer(Image *,MagickCLDevice,ExceptionInfo *); extern MagickPrivate void SyncAuthenticOpenCLBuffer(const Image *); diff --git a/MagickCore/cache.c b/MagickCore/cache.c index 95613b077..fb50b3319 100644 --- a/MagickCore/cache.c +++ b/MagickCore/cache.c @@ -1136,7 +1136,7 @@ static void *GetAuthenticMetacontentFromCache(const Image *image) % % The format of the GetAuthenticOpenCLBuffer() method is: % -% cl_mem GetAuthenticOpenCLBuffer(const Image *image, +% cl_mem GetAuthenticOpenCLBuffer(Image *image, % MagickCLDevice device,ExceptionInfo *exception) % % A description of each parameter follows: @@ -1148,7 +1148,7 @@ static void *GetAuthenticMetacontentFromCache(const Image *image) % o exception: return any errors or warnings in this structure. % */ -MagickPrivate cl_mem GetAuthenticOpenCLBuffer(const Image *image, +MagickPrivate cl_mem GetAuthenticOpenCLBuffer(Image *image, MagickCLDevice device,ExceptionInfo *exception) { CacheInfo @@ -1157,8 +1157,11 @@ MagickPrivate cl_mem GetAuthenticOpenCLBuffer(const Image *image, assert(image != (const Image *) NULL); assert(device != (const MagickCLDevice) NULL); cache_info=(CacheInfo *) image->cache; - if (cache_info->type == UndefinedCache) - SyncImagePixelCache((Image *) image,exception); + if ((cache_info->type == UndefinedCache) || (cache_info->reference_count > 1)) + { + SyncImagePixelCache(image,exception); + cache_info=(CacheInfo *) image->cache; + } if ((cache_info->type != MemoryCache) || (cache_info->mapped != MagickFalse)) return((cl_mem) NULL); LockSemaphoreInfo(cache_info->semaphore);