diff options
-rw-r--r-- | src/libutil/mem_pool.c | 6 | ||||
-rw-r--r-- | src/libutil/mem_pool.h | 2 |
2 files changed, 8 insertions, 0 deletions
diff --git a/src/libutil/mem_pool.c b/src/libutil/mem_pool.c index c01ce0c2c..ed3a6b73d 100644 --- a/src/libutil/mem_pool.c +++ b/src/libutil/mem_pool.c @@ -393,6 +393,8 @@ memory_pool_alloc_common (rspamd_mempool_t * pool, gsize size, if (pool) { POOL_MTX_LOCK (); + pool->used_memory += size; + if (always_malloc && pool_type != RSPAMD_MEMPOOL_SHARED) { void *ptr; @@ -416,6 +418,10 @@ memory_pool_alloc_common (rspamd_mempool_t * pool, gsize size, } if (cur == NULL || free < size) { + if (free < size) { + pool->wasted_memory += free; + } + /* Allocate new chain element */ if (pool->elt_len >= size + MIN_MEM_ALIGNMENT) { pool->entry->elts[pool->entry->cur_elts].fragmentation += size; diff --git a/src/libutil/mem_pool.h b/src/libutil/mem_pool.h index 5a663e35f..a32aa0597 100644 --- a/src/libutil/mem_pool.h +++ b/src/libutil/mem_pool.h @@ -127,6 +127,8 @@ typedef struct memory_pool_s { GPtrArray *trash_stack; GHashTable *variables; /**< private memory pool variables */ gsize elt_len; /**< size of an element */ + gsize used_memory; + gsize wasted_memory; struct rspamd_mempool_entry_point *entry; struct rspamd_mempool_tag tag; /**< memory pool tag */ } rspamd_mempool_t; |