GraphicsMagick: Resource limited memory: Maintain a tally of the...
GraphicsMagick Commits <[email protected]>
| Newsgroups | gmane.comp.video.graphicsmagick.cvs |
|---|---|
| Message-ID | <mailman.46226.1640798273.1346.graphicsmagick-commit@lists.sourceforge.net> |
changeset e0e762ead892 in /hg/GraphicsMagick details: http://hg.GraphicsMagick.org/hg/GraphicsMagick?cmd=changeset;node=e0e762ead892 summary: Resource limited memory: Maintain a tally of the total number of octets moved by realloc. diffstat: ChangeLog | 9 +++++++++ VisualMagick/installer/inc/version.isx | 4 ++-- magick/memory-private.h | 18 +++++++++++------- magick/memory.c | 24 ++++++++++++++++++++---- magick/version.h | 4 ++-- www/Changelog.html | 8 ++++++++ 6 files changed, 52 insertions(+), 15 deletions(-) diffs (184 lines): diff -r cbfeeef1ceab -r e0e762ead892 ChangeLog --- a/ChangeLog Mon Dec 27 13:43:38 2021 -0600 +++ b/ChangeLog Wed Dec 29 11:17:33 2021 -0600 @@ -1,3 +1,12 @@ +2021-12-29 Bob Friesenhahn <[email protected]> + + * magick/memory-private.h(_MagickReallocateResourceLimitedMemory) + : Remove use of GCC/Clang '__attribute_malloc__' since it is not + appropriate for this function. + + * magick/memory.c (_MagickReallocateResourceLimitedMemory): + Maintain a tally of the total number of octets moved by realloc. + 2021-12-27 Bob Friesenhahn <[email protected]> * coders/mat.c (ReadMATImage): Change 'ldblk' to size_t and diff -r cbfeeef1ceab -r e0e762ead892 VisualMagick/installer/inc/version.isx --- a/VisualMagick/installer/inc/version.isx Mon Dec 27 13:43:38 2021 -0600 +++ b/VisualMagick/installer/inc/version.isx Wed Dec 29 11:17:33 2021 -0600 @@ -10,5 +10,5 @@ #define public MagickPackageName "GraphicsMagick" #define public MagickPackageVersion "1.4" -#define public MagickPackageVersionAddendum ".020211227" -#define public MagickPackageReleaseDate "snapshot-20211227" +#define public MagickPackageVersionAddendum ".020211229" +#define public MagickPackageReleaseDate "snapshot-20211229" diff -r cbfeeef1ceab -r e0e762ead892 magick/memory-private.h --- a/magick/memory-private.h Mon Dec 27 13:43:38 2021 -0600 +++ b/magick/memory-private.h Wed Dec 29 11:17:33 2021 -0600 @@ -16,10 +16,10 @@ MagickArraySize(const size_t count,const size_t size) MAGICK_FUNC_CONST; extern MagickExport - void *_MagickReallocateResourceLimitedMemory(void *p,const size_t count,const size_t size,const MagickBool clear); + void *_MagickReallocateResourceLimitedMemory(void *p,const size_t count,const size_t size,const MagickBool clear) MAGICK_FUNC_ALLOC_SIZE_2ARG(2,3); extern MagickExport - void *_MagickAllocateResourceLimitedMemory(const size_t size); + void *_MagickAllocateResourceLimitedMemory(const size_t size) MAGICK_FUNC_MALLOC MAGICK_FUNC_ALLOC_SIZE_1ARG(1); extern MagickExport void _MagickFreeResourceLimitedMemory(void *p); @@ -57,7 +57,7 @@ #define MagickAllocateResourceLimitedMemory(type,size) \ ((((size) != ((size_t) (size))) || (size == 0)) ? ((type) 0) : \ - ((type) _MagickReallocateResourceLimitedMemory(0,1,(size_t) (size),MagickFalse))) + ((type) _MagickAllocateResourceLimitedMemory((size_t) (size)))) #define MagickAllocateResourceLimitedClearedMemory(type,size) \ ((((size) != ((size_t) (size))) || (size == 0)) ? ((type) 0) : \ @@ -127,10 +127,11 @@ */ typedef enum _MagickAllocateResourceLimitedMemoryAttribute { - ResourceLimitedMemoryAttributeAllocSize, - ResourceLimitedMemoryAttributeAllocSizeReal, - ResourceLimitedMemoryAttributeAllocNumReallocs, - ResourceLimitedMemoryAttributeAllocNumReallocsMoved + ResourceLimitedMemoryAttributeAllocSize, /* Currently requested allocation size */ + ResourceLimitedMemoryAttributeAllocSizeReal, /* Actual underlying requested allocation size */ + ResourceLimitedMemoryAttributeAllocNumReallocs, /* Number of reallocations performed */ + ResourceLimitedMemoryAttributeAllocNumReallocsMoved, /* Number of reallocations which moved memory (pointer change) */ + ResourceLimitedMemoryAttributeAllocReallocOctetsMoved /* Total octets moved due to reallocations (may overflow!) */ } MagickAllocateResourceLimitedMemoryAttribute; /* @@ -145,6 +146,9 @@ #define MagickResourceLimitedMemoryGetAllocSizeReal(p) \ _MagickResourceLimitedMemoryGetSizeAttribute(p, ResourceLimitedMemoryAttributeAllocSizeReal); +/* + Given an exisisting allocation, request certain attributes/metrics from it. +*/ MagickExport size_t _MagickResourceLimitedMemoryGetSizeAttribute(const void *p, const MagickAllocateResourceLimitedMemoryAttribute attr); diff -r cbfeeef1ceab -r e0e762ead892 magick/memory.c --- a/magick/memory.c Mon Dec 27 13:43:38 2021 -0600 +++ b/magick/memory.c Wed Dec 29 11:17:33 2021 -0600 @@ -589,6 +589,7 @@ size_t alloc_size_real; /* Real/underlying allocation size */ size_t num_realloc; /* Number of actual reallocations performed */ size_t num_realloc_moves; /* Number of reallocations which moved memory */ + size_t realloc_octets_moved; /* Number of octets moved by reallocations */ size_t signature; /* Initialized to MagickSignature */ } MagickMemoryResource_T; @@ -623,6 +624,7 @@ (memory_resource)->alloc_size_real = 0; \ (memory_resource)->num_realloc = 0; \ (memory_resource)->num_realloc_moves = 0; \ + (memory_resource)->realloc_octets_moved = 0; \ (memory_resource)->signature = MagickSignature; \ } \ } while(0) @@ -662,6 +664,7 @@ memory_resource->alloc_size = 0; memory_resource->num_realloc = 0; memory_resource->num_realloc_moves = 0; + memory_resource->realloc_octets_moved = 0; } @@ -752,7 +755,10 @@ memory_resource.num_realloc++; /* Tally reallocations which resulted in a memory move */ if (realloc_memory != memory_resource.memory) - memory_resource.num_realloc_moves++; + { + memory_resource.num_realloc_moves++; + memory_resource.realloc_octets_moved += memory_resource.alloc_size; + } memory_resource.memory = realloc_memory; memory_resource.alloc_size = new_size; memory_resource.alloc_size_real = realloc_size-sizeof(MagickMemoryResource_T); @@ -778,7 +784,13 @@ } else { - /* Acquire memory resource FAILED */ + /* + Acquire memory resource FAILED. If this was a + realloc, it is expected that the original pointer is + valid and retained by the user, who will responsibly + free it so its resource allocation will be released + later. + */ #if defined(ENOMEM) errno = ENOMEM; #endif /* if defined(ENOMEM) */ @@ -854,13 +866,17 @@ result = memory_resource.alloc_size_real; break; case ResourceLimitedMemoryAttributeAllocNumReallocs: - /* Number of reallocations performed on buffer */ + /* Number of reallocations performed */ result = memory_resource.num_realloc; break; case ResourceLimitedMemoryAttributeAllocNumReallocsMoved: - /* Number of reallocations performed on buffer which moved memory */ + /* Number of reallocations which moved memory (pointer change) */ result = memory_resource.num_realloc_moves; break; + case ResourceLimitedMemoryAttributeAllocReallocOctetsMoved: + /* Total number of octets moved due to reallocations (may overflow!) */ + result = memory_resource.realloc_octets_moved; + break; } return result; diff -r cbfeeef1ceab -r e0e762ead892 magick/version.h --- a/magick/version.h Mon Dec 27 13:43:38 2021 -0600 +++ b/magick/version.h Wed Dec 29 11:17:33 2021 -0600 @@ -38,8 +38,8 @@ #define MagickLibVersion 0x262300 #define MagickLibVersionText "1.4" #define MagickLibVersionNumber 26,23,0 -#define MagickChangeDate "20211227" -#define MagickReleaseDate "snapshot-20211227" +#define MagickChangeDate "20211229" +#define MagickReleaseDate "snapshot-20211229" /* The MagickLibInterfaceNewest and MagickLibInterfaceOldest defines diff -r cbfeeef1ceab -r e0e762ead892 www/Changelog.html --- a/www/Changelog.html Mon Dec 27 13:43:38 2021 -0600 +++ b/www/Changelog.html Wed Dec 29 11:17:33 2021 -0600 @@ -35,6 +35,14 @@ <div class="document"> +<p>2021-12-29 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p> +<blockquote> +<p>* magick/memory-private.h(_MagickReallocateResourceLimitedMemory) +: Remove use of GCC/Clang '__attribute_malloc__' since it is not +appropriate for this function.</p> +<p>* magick/memory.c (_MagickReallocateResourceLimitedMemory): +Maintain a tally of the total number of octets moved by realloc.</p> +</blockquote> <p>2021-12-27 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p> <blockquote> * coders/mat.c (ReadMATImage): Change 'ldblk' to size_t and