]> granicus.if.org Git - imagemagick/commitdiff
https://github.com/ImageMagick/ImageMagick/issues/563
authorCristy <urban-warrior@imagemagick.org>
Wed, 26 Jul 2017 12:24:55 +0000 (08:24 -0400)
committerCristy <urban-warrior@imagemagick.org>
Wed, 26 Jul 2017 12:24:55 +0000 (08:24 -0400)
MagickCore/cache.c

index d01ce0ef85dfa3509b890af7ff1fb5735ca68bab..3892cd6f23a3ab3ede80aafa20afb2ceb9aa4cb5 100644 (file)
@@ -418,7 +418,23 @@ MagickPrivate Cache ClonePixelCache(const Cache cache)
   clone_info=(CacheInfo *) AcquirePixelCache(cache_info->number_threads);
   if (clone_info == (Cache) NULL)
     return((Cache) NULL);
+  clone_info->file=cache_info->file;
+  (void) CopyMagickString(clone_info->filename,cache_info->filename,
+    MagickPathExtent);
+  clone_info->storage_class=cache_info->storage_class;
+  clone_info->colorspace=cache_info->colorspace;
+  clone_info->alpha_trait=cache_info->alpha_trait;
+  clone_info->read_mask=cache_info->read_mask;
+  clone_info->write_mask=cache_info->write_mask;
+  clone_info->rows=cache_info->rows;
+  clone_info->columns=cache_info->columns;
+  clone_info->number_channels=cache_info->number_channels;
+  (void) memcpy(clone_info->channel_map,cache_info->channel_map,
+    MaxPixelChannels*sizeof(*cache_info->channel_map));
+  clone_info->metacontent_extent=cache_info->metacontent_extent;
+  clone_info->mode=cache_info->mode;
   clone_info->virtual_pixel_method=cache_info->virtual_pixel_method;
+  clone_info->length=cache_info->length;
   return((Cache ) clone_info);
 }
 \f
@@ -3821,9 +3837,6 @@ MagickExport MagickBooleanType PersistPixelCache(Image *image,
     *magick_restrict cache_info,
     *magick_restrict clone_info;
 
-  Image
-    *clone_image;
-
   MagickBooleanType
     status;
 
@@ -3863,17 +3876,14 @@ MagickExport MagickBooleanType PersistPixelCache(Image *image,
   /*
     Clone persistent pixel cache.
   */
-  clone_image=CloneImage(image,image->columns,image->rows,MagickTrue,exception);
-  if (clone_image == (Image *) NULL)
-    return(MagickFalse);
-  clone_info=(CacheInfo *) clone_image->cache;
+  clone_info=ClonePixelCache(cache_info);
   (void) CopyMagickString(clone_info->cache_filename,filename,MagickPathExtent);
   clone_info->mode=PersistMode;
   clone_info->type=DiskCache;
   clone_info->offset=(*offset);
   status=ClonePixelCacheRepository(clone_info,cache_info,exception);
   *offset+=cache_info->length+page_size-(cache_info->length % page_size);
-  clone_image=DestroyImage(clone_image);
+  clone_info=DestroyPixelCache(clone_info);
   return(status);
 }
 \f