From 0cb42c774d78f31c1b61caa10bea42ae8dbe516b Mon Sep 17 00:00:00 2001 From: cristy Date: Sat, 6 Nov 2010 15:53:41 +0000 Subject: [PATCH] --- magick/cache.c | 51 +++++++++++++++++++++++++++----------------------- 1 file changed, 28 insertions(+), 23 deletions(-) diff --git a/magick/cache.c b/magick/cache.c index 62667e778..ff834b928 100644 --- a/magick/cache.c +++ b/magick/cache.c @@ -2099,39 +2099,44 @@ static Cache GetImagePixelCache(Image *image,const MagickBooleanType clone, assert(image->cache != (Cache) NULL); cache_info=(CacheInfo *) image->cache; destroy=MagickFalse; - if ((cache_info->reference_count > 1) || (cache_info->mode == ReadMode)) + if (cache_info->type != PingCache) { - LockSemaphoreInfo(cache_info->semaphore); if ((cache_info->reference_count > 1) || (cache_info->mode == ReadMode)) { - Image - clone_image; + LockSemaphoreInfo(cache_info->semaphore); + if ((cache_info->reference_count > 1) || + (cache_info->mode == ReadMode)) + { + Image + clone_image; - CacheInfo - *clone_info; + CacheInfo + *clone_info; - /* - Clone pixel cache. - */ - clone_image=(*image); - clone_image.semaphore=AllocateSemaphoreInfo(); - clone_image.reference_count=1; - clone_image.cache=ClonePixelCache(cache_info); - clone_info=(CacheInfo *) clone_image.cache; - status=OpenPixelCache(&clone_image,IOMode,exception); - if (status != MagickFalse) - { - if (clone != MagickFalse) - status=ClonePixelCachePixels(clone_info,cache_info,exception); + /* + Clone pixel cache. + */ + clone_image=(*image); + clone_image.semaphore=AllocateSemaphoreInfo(); + clone_image.reference_count=1; + clone_image.cache=ClonePixelCache(cache_info); + clone_info=(CacheInfo *) clone_image.cache; + status=OpenPixelCache(&clone_image,IOMode,exception); if (status != MagickFalse) { - destroy=MagickTrue; - image->cache=clone_image.cache; + if (clone != MagickFalse) + status=ClonePixelCachePixels(clone_info,cache_info, + exception); + if (status != MagickFalse) + { + destroy=MagickTrue; + image->cache=clone_image.cache; + } } + DestroySemaphoreInfo(&clone_image.semaphore); } - DestroySemaphoreInfo(&clone_image.semaphore); + UnlockSemaphoreInfo(cache_info->semaphore); } - UnlockSemaphoreInfo(cache_info->semaphore); } if (destroy != MagickFalse) cache_info=(CacheInfo *) DestroyPixelCache(cache_info); -- 2.40.0