--- libelwix/src/mem.c 2015/06/25 01:19:09 1.4.18.2 +++ libelwix/src/mem.c 2015/06/25 16:49:33 1.4.18.3 @@ -3,7 +3,7 @@ * by Michael Pounov * * $Author: misho $ -* $Id: mem.c,v 1.4.18.2 2015/06/25 01:19:09 misho Exp $ +* $Id: mem.c,v 1.4.18.3 2015/06/25 16:49:33 misho Exp $ * ************************************************************************** The ELWIX and AITNET software is distributed under the following @@ -218,6 +218,7 @@ mpool_malloc(mpool_t * __restrict mp, u_int size, cons return NULL; } else { /* quota */ mp->pool_quota.curr += size; + mp->pool_quota.real += 1 << (idx + MEM_MIN_BUCKET); memset(m->alloc_mem, 0, align + 12); } } @@ -326,6 +327,7 @@ mpool_realloc(mpool_t * __restrict mp, void * __restri } /* quota */ mp->pool_quota.curr += (u_long) newsize - osize; + mp->pool_quota.real += (1 << (idx + MEM_MIN_BUCKET)) - (1 << (oidx + MEM_MIN_BUCKET)); m->alloc_mem[0] = newsize / sizeof(u_int); m->alloc_mem[1] = MEM_MAGIC_START; @@ -382,6 +384,7 @@ mpool_purge(mpool_t * __restrict mp, u_int atmost) mp->pool_bytes.free += mem_size(m); /* quota */ mp->pool_quota.curr -= mem_size(m); + mp->pool_quota.real -= 1 << (i + MEM_MIN_BUCKET); if (m->alloc_mem) free(m->alloc_mem); @@ -440,6 +443,7 @@ mpool_free(mpool_t * __restrict mp, void * __restrict mp->pool_bytes.free += mem_size(m); /* quota */ mp->pool_quota.curr -= mem_size(m); + mp->pool_quota.real -= 1 << (idx + MEM_MIN_BUCKET); if (m->alloc_mem) free(m->alloc_mem); @@ -492,6 +496,7 @@ mpool_free2(mpool_t * __restrict mp, u_int size, const mp->pool_bytes.free += mem_size(m); /* quota */ mp->pool_quota.curr -= mem_size(m); + mp->pool_quota.real -= 1 << (idx + MEM_MIN_BUCKET); if (m->alloc_mem) free(m->alloc_mem); @@ -627,18 +632,21 @@ mpool_setquota(mpool_t * __restrict mp, u_long maxmem) * mpool_getquota() - Get memory quota * * @mp = Memory pool - * @currmem = Return current memory + * @currmem = Return current memory usage + * @realmem = Return current real memory usage * @maxmem = Return max quota size * return: none */ void -mpool_getquota(mpool_t * __restrict mp, u_long *currmem, u_long *maxmem) +mpool_getquota(mpool_t * __restrict mp, u_long *currmem, u_long *realmem, u_long *maxmem) { if (!mp) return; if (maxmem) *maxmem = mp->pool_quota.max; + if (realmem) + *realmem = mp->pool_quota.real; if (currmem) *currmem = mp->pool_quota.curr; } @@ -775,11 +783,11 @@ mpool_xdump() printf("\n%s(%d)\n------------------------------------------------------------\n", __func__, __LINE__); printf( " ELWIX memory pool ::\n" - "\t- quotas Current/Max = %lu/%lu\n" + "\t- quotas Current/Real/Max = %lu/%lu/%lu\n" "\t- calls Alloc/Free/Cache = %lu/%lu/%lu\n" "\t- bytes Alloc/Free/Cache = %lu/%lu/%lu\n" "\t- buckets :\n", - elwix_mpool->pool_quota.curr, elwix_mpool->pool_quota.max, + elwix_mpool->pool_quota.curr, elwix_mpool->pool_quota.real, elwix_mpool->pool_quota.max, elwix_mpool->pool_calls.alloc, elwix_mpool->pool_calls.free, elwix_mpool->pool_calls.cache, elwix_mpool->pool_bytes.alloc, elwix_mpool->pool_bytes.free, elwix_mpool->pool_bytes.cache);