aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLasse Collin <lasse.collin@tukaani.org>2008-01-16 14:46:50 +0200
committerLasse Collin <lasse.collin@tukaani.org>2008-01-16 14:46:50 +0200
commit5b5b13c7bb8fde6331064d21f3ebde41072480c4 (patch)
treec502d3107e753fb687efcd684eaa906859da1fa2 /src
parentAdded ARRAY_SIZE(array) macro. (diff)
downloadxz-5b5b13c7bb8fde6331064d21f3ebde41072480c4.tar.xz
Added lzma_memlimit_count().
Diffstat (limited to 'src')
-rw-r--r--src/liblzma/api/lzma/memlimit.h10
-rw-r--r--src/liblzma/common/memory_limitter.c19
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)
{