diff options
author | Lasse Collin <lasse.collin@tukaani.org> | 2008-01-16 14:46:50 +0200 |
---|---|---|
committer | Lasse Collin <lasse.collin@tukaani.org> | 2008-01-16 14:46:50 +0200 |
commit | 5b5b13c7bb8fde6331064d21f3ebde41072480c4 (patch) | |
tree | c502d3107e753fb687efcd684eaa906859da1fa2 | |
parent | Added ARRAY_SIZE(array) macro. (diff) | |
download | xz-5b5b13c7bb8fde6331064d21f3ebde41072480c4.tar.xz |
Added lzma_memlimit_count().
-rw-r--r-- | src/liblzma/api/lzma/memlimit.h | 10 | ||||
-rw-r--r-- | src/liblzma/common/memory_limitter.c | 19 |
2 files changed, 29 insertions, 0 deletions
diff --git a/src/liblzma/api/lzma/memlimit.h b/src/liblzma/api/lzma/memlimit.h index 26ec50fe..6f782899 100644 --- a/src/liblzma/api/lzma/memlimit.h +++ b/src/liblzma/api/lzma/memlimit.h @@ -93,6 +93,16 @@ extern size_t lzma_memlimit_used(const lzma_memlimit *mem); /** + * \brief Gets the number of allocations owned by the memory limitter + * + * The count does not include the helper structures; if no memory has + * been allocated with lzma_memlimit_alloc() or all memory allocated + * has been freed or detached, this will return zero. + */ +extern size_t lzma_memlimit_count(const lzma_memlimit *mem); + + +/** * \brief Allocates memory with malloc() if memory limit allows * * \param mem Pointer to a lzma_memlimit structure returned diff --git a/src/liblzma/common/memory_limitter.c b/src/liblzma/common/memory_limitter.c index 19cdefc2..0983c82e 100644 --- a/src/liblzma/common/memory_limitter.c +++ b/src/liblzma/common/memory_limitter.c @@ -85,6 +85,25 @@ lzma_memlimit_used(const lzma_memlimit *mem) } +extern LZMA_API size_t +lzma_memlimit_count(const lzma_memlimit *mem) +{ + // This is slow; we could have a counter in lzma_memlimit + // for fast version. I expect the primary use of this + // function to be limited to easy checking of memory leaks, + // in which this implementation is just fine. + size_t count = 0; + const lzma_memlimit_list *record = mem->list; + + while (record != NULL) { + ++count; + record = record->next; + } + + return count; +} + + extern LZMA_API void lzma_memlimit_end(lzma_memlimit *mem, lzma_bool free_allocated) { |