From 5af2c2b9c8a266e2327584c2a3cac265871481eb Mon Sep 17 00:00:00 2001 From: Pavel Charvat Date: Tue, 8 Jul 2008 08:23:16 +0200 Subject: [PATCH] Implemented {mp,ep}_total_size(). --- lib/eltpool.c | 7 +++++++ lib/eltpool.h | 2 ++ lib/mempool.c | 8 ++++++++ lib/mempool.h | 3 ++- 4 files changed, 19 insertions(+), 1 deletion(-) diff --git a/lib/eltpool.c b/lib/eltpool.c index f82de845..b32843fc 100644 --- a/lib/eltpool.c +++ b/lib/eltpool.c @@ -60,9 +60,16 @@ ep_alloc_slow(struct eltpool *pool) } ch->next = pool->first_chunk; pool->first_chunk = ch; + pool->num_chunks++; return p; } +u64 +ep_total_size(struct eltpool *pool) +{ + return (u64)pool->num_chunks * pool->chunk_size + sizeof(*pool); +} + #ifdef TEST #include diff --git a/lib/eltpool.h b/lib/eltpool.h index 7e295fb7..795a45e9 100644 --- a/lib/eltpool.h +++ b/lib/eltpool.h @@ -17,6 +17,7 @@ struct eltpool { uns chunk_size; uns elts_per_chunk; uns num_allocated; // Just for debugging + uns num_chunks; }; struct eltpool_chunk { @@ -31,6 +32,7 @@ struct eltpool_free { struct eltpool *ep_new(uns elt_size, uns elts_per_chunk); void ep_delete(struct eltpool *pool); void *ep_alloc_slow(struct eltpool *pool); +u64 ep_total_size(struct eltpool *pool); static inline void * ep_alloc(struct eltpool *pool) diff --git a/lib/mempool.c b/lib/mempool.c index 658f5384..fee77f03 100644 --- a/lib/mempool.c +++ b/lib/mempool.c @@ -168,6 +168,14 @@ mp_stats(struct mempool *pool, struct mempool_stats *stats) mp_stats_chain(pool->unused, stats, 2); } +u64 +mp_total_size(struct mempool *pool) +{ + struct mempool_stats stats; + mp_stats(pool, &stats); + return stats.total_size; +} + void * mp_alloc_internal(struct mempool *pool, uns size) { diff --git a/lib/mempool.h b/lib/mempool.h index c53423ab..d8602410 100644 --- a/lib/mempool.h +++ b/lib/mempool.h @@ -27,7 +27,7 @@ struct mempool { /* Statistics (see mp_stats()) */ struct mempool_stats { - uns total_size; /* Real allocated size in bytes */ + u64 total_size; /* Real allocated size in bytes */ uns chain_count[3]; /* Number of allocated chunks in small/big/unused chains */ uns chain_size[3]; /* Size of allocated chunks in small/big/unused chains */ }; @@ -46,6 +46,7 @@ void mp_flush(struct mempool *pool); /* Compute some statistics for debug purposes. See the definition of the mempool_stats structure. */ void mp_stats(struct mempool *pool, struct mempool_stats *stats); +u64 mp_total_size(struct mempool *pool); /*** Allocation routines ***/ -- 2.39.2