Skip to content

Commit

Permalink
https://github.com/ImageMagick/ImageMagick/issues/552
Browse files Browse the repository at this point in the history
  • Loading branch information
Cristy committed Jul 23, 2017
1 parent 3068426 commit 46bcb8a
Show file tree
Hide file tree
Showing 4 changed files with 24 additions and 21 deletions.
3 changes: 0 additions & 3 deletions ChangeLog
Original file line number Diff line number Diff line change
@@ -1,6 +1,3 @@
2017-07-23 7.0.6-3 Cristy <quetzlzacatenango@image...>
* Release ImageMagick version 7.0.6-3, GIT revision 20582:b6e1fa3f6:20170723.

2017-07-23 7.0.6-3 Cristy <quetzlzacatenango@image...>
* Fixed numerous memory leaks (reference
https://github.com/ImageMagick/ImageMagick/issues).
Expand Down
3 changes: 3 additions & 0 deletions MagickCore/cache-private.h
Original file line number Diff line number Diff line change
Expand Up @@ -223,6 +223,9 @@ typedef struct _CacheInfo

MagickCLCacheInfo
opencl;

MagickBooleanType
persist,
} CacheInfo;

extern MagickPrivate Cache
Expand Down
28 changes: 14 additions & 14 deletions MagickCore/cache.c
Original file line number Diff line number Diff line change
Expand Up @@ -3544,6 +3544,8 @@ static MagickBooleanType OpenPixelCache(Image *image,const MapMode mode,
return(MagickTrue);
}
status=AcquireMagickResource(AreaResource,cache_info->length);
if ((status != MagickFalse) && (cache_info->persist != MagickFalse))
status=MagickFalse;
length=number_pixels*(cache_info->number_channels*sizeof(Quantum)+
cache_info->metacontent_extent);
if ((status != MagickFalse) && (length == (MagickSizeType) ((size_t) length)))
Expand Down Expand Up @@ -3669,7 +3671,8 @@ static MagickBooleanType OpenPixelCache(Image *image,const MapMode mode,
"CacheResourcesExhausted","`%s'",image->filename);
return(MagickFalse);
}
if ((source_info.storage_class != UndefinedClass) && (mode != ReadMode))
if ((source_info.storage_class != UndefinedClass) && (mode != ReadMode) &&
(cache_info->persist != MagickFalse))
{
(void) ClosePixelCacheOnDisk(cache_info);
*cache_info->cache_filename='\0';
Expand Down Expand Up @@ -3819,7 +3822,7 @@ MagickExport MagickBooleanType PersistPixelCache(Image *image,
*magick_restrict clone_info;

Image
clone_image;
*clone_image;

MagickBooleanType
status;
Expand Down Expand Up @@ -3860,19 +3863,16 @@ MagickExport MagickBooleanType PersistPixelCache(Image *image,
/*
Clone persistent pixel cache.
*/
clone_image=(*image);
clone_info=(CacheInfo *) clone_image.cache;
image->cache=ClonePixelCache(cache_info);
cache_info=(CacheInfo *) ReferencePixelCache(image->cache);
(void) CopyMagickString(cache_info->cache_filename,filename,MagickPathExtent);
cache_info->type=DiskCache;
cache_info->offset=(*offset);
cache_info=(CacheInfo *) image->cache;
status=OpenPixelCache(image,IOMode,exception);
if (status != MagickFalse)
status=ClonePixelCacheRepository(cache_info,clone_info,exception);
clone_image=CloneImage(image,image->columns,image->rows,MagickTrue,exception);
if (clone_image == (Image *) NULL)
return(MagickFalse);
clone_info=(CacheInfo *) clone_image->cache;
(void) CopyMagickString(clone_info->cache_filename,filename,MagickPathExtent);
clone_info->persist=MagickTrue;
clone_info->offset=(*offset);
status=ClonePixelCacheRepository(clone_info,image->cache,exception);
*offset+=cache_info->length+page_size-(cache_info->length % page_size);
clone_info=(CacheInfo *) DestroyPixelCache(clone_info);
clone_image=DestroyImage(clone_image);
return(status);
}

Expand Down
11 changes: 7 additions & 4 deletions MagickCore/resource.c
Original file line number Diff line number Diff line change
Expand Up @@ -1007,11 +1007,14 @@ MagickExport MagickBooleanType RelinquishUniqueFileResource(const char *path)
ActivateSemaphoreInfo(&resource_semaphore);
LockSemaphoreInfo(resource_semaphore);
if (temporary_resources != (SplayTreeInfo *) NULL)
status=DeleteNodeFromSplayTree(temporary_resources, (const void *) path);
status=DeleteNodeFromSplayTree(temporary_resources,(const void *) path);
UnlockSemaphoreInfo(resource_semaphore);
(void) CopyMagickString(cache_path,path,MagickPathExtent);
AppendImageFormat("cache",cache_path);
(void) ShredFile(cache_path);
if (status != MagickFalse)
{
(void) CopyMagickString(cache_path,path,MagickPathExtent);
AppendImageFormat("cache",cache_path);
(void) ShredFile(cache_path);
}
if (status == MagickFalse)
status=ShredFile(path);
return(status);
Expand Down

0 comments on commit 46bcb8a

Please sign in to comment.