]> granicus.if.org Git - imagemagick/commitdiff
(no commit message)
authorcristy <urban-warrior@git.imagemagick.org>
Sat, 6 Nov 2010 16:05:49 +0000 (16:05 +0000)
committercristy <urban-warrior@git.imagemagick.org>
Sat, 6 Nov 2010 16:05:49 +0000 (16:05 +0000)
magick/cache.c

index ff834b928467bd41b7ae812b417f02b090cd78c7..eb5d373cfbccc3449a9fdd334448862890d94e3a 100644 (file)
@@ -2099,44 +2099,42 @@ static Cache GetImagePixelCache(Image *image,const MagickBooleanType clone,
   assert(image->cache != (Cache) NULL);
   cache_info=(CacheInfo *) image->cache;
   destroy=MagickFalse;
-  if (cache_info->type != PingCache)
+  if ((cache_info->reference_count > 1) || (cache_info->mode == ReadMode))
     {
-      if ((cache_info->reference_count > 1) || (cache_info->mode == ReadMode))
+      LockSemaphoreInfo(cache_info->semaphore);
+      if ((cache_info->reference_count > 1) ||
+          (cache_info->mode == ReadMode))
         {
-          LockSemaphoreInfo(cache_info->semaphore);
-          if ((cache_info->reference_count > 1) ||
-              (cache_info->mode == ReadMode))
-            {
-              Image
-                clone_image;
+          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);
+          /*
+            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) &&
+                  (cache_info->type != PingCache))
+                status=ClonePixelCachePixels(clone_info,cache_info,
+                  exception);
               if (status != MagickFalse)
                 {
-                  if (clone != MagickFalse)
-                    status=ClonePixelCachePixels(clone_info,cache_info,
-                      exception);
-                  if (status != MagickFalse)
-                    {
-                      destroy=MagickTrue;
-                      image->cache=clone_image.cache;
-                    }
+                  destroy=MagickTrue;
+                  image->cache=clone_image.cache;
                 }
-              DestroySemaphoreInfo(&clone_image.semaphore);
             }
-          UnlockSemaphoreInfo(cache_info->semaphore);
+          DestroySemaphoreInfo(&clone_image.semaphore);
         }
+      UnlockSemaphoreInfo(cache_info->semaphore);
     }
   if (destroy != MagickFalse)
     cache_info=(CacheInfo *) DestroyPixelCache(cache_info);