--- libaitsess/inc/aitsess.h 2012/02/27 23:57:12 1.4.2.3 +++ libaitsess/inc/aitsess.h 2012/02/28 12:58:10 1.4.2.7 @@ -3,7 +3,7 @@ * by Michael Pounov * * $Author: misho $ -* $Id: aitsess.h,v 1.4.2.3 2012/02/27 23:57:12 misho Exp $ +* $Id: aitsess.h,v 1.4.2.7 2012/02/28 12:58:10 misho Exp $ * ************************************************************************** The ELWIX and AITNET software is distributed under the following @@ -72,7 +72,6 @@ SUCH DAMAGE. struct tagAlloc { char alloc_name[MAX_ATTRIBUTE]; - volatile unsigned int alloc_flags; unsigned int *alloc_mem; @@ -105,6 +104,9 @@ typedef struct _tagMPool { #define mpool_lock(x) (assert((x)), pthread_mutex_lock(&(x)->pool_mtx)) #define mpool_unlock(x) (assert((x)), pthread_mutex_unlock(&(x)->pool_mtx)) +typedef void (*mpool_stat_cb)(unsigned int, unsigned int, unsigned int); + + /* Shared memory session */ typedef struct tagSess { @@ -151,9 +153,10 @@ inline void sess_SetErr(int eno, char *estr, ...); /* * mpool_init() - Init memory pool * + * @maxmem = If !=0 set maximum memory quota * return: =NULL error or !=NULL new allocated pool */ -mpool_t *mpool_init(void); +mpool_t *mpool_init(unsigned long maxmem); /* * mpool_destroy() - Destroy memory pool * @@ -168,7 +171,7 @@ void mpool_destroy(mpool_t ** __restrict mp); * @atmost = Free at most in buckets * return: -1 error or 0 ok */ -int mpool_purge(mpool_t * __restrict mp, int atmost); +int mpool_purge(mpool_t * __restrict mp, unsigned int atmost); /* * mpool_malloc() - Memory allocation * @@ -198,6 +201,17 @@ int mpool_free(mpool_t * __restrict mp, void * __restr */ int mpool_free2(mpool_t * __restrict mp, unsigned int size, const char *memname, int purge); /* + * mpool_realloc() Reallocate memory block with new size + * + * @mp = Memory pool + * @data = Allocated memory data + * @newsize = New size of memory block + * @memname = Optional new memory block name + * return: NULL error or !=NULL new reallocated memory block + */ +void *mpool_realloc(mpool_t * __restrict mp, void * __restrict data, + unsigned int newsize, const char *memname); +/* * mpool_getmembynam() Find allocated memory block by size and memory name * * @mp = Memory pool @@ -220,6 +234,32 @@ inline unsigned int mpool_getsizebyaddr(void * __restr * return: -1 bad address, 1 corrupted address or 0 ok */ inline int mpool_chkaddr(void * __restrict data); +/* + * mpool_setquota() - Change maximum memory quota + * + * @mp = Memory pool + * @maxmem = New max quota size + * return: old maximum memory quota size + */ +inline unsigned long mpool_setquota(mpool_t * __restrict mp, unsigned long maxmem); +/* + * mpool_getquota() - Get memory quota + * + * @mp = Memory pool + * @currmem = Return current memory + * @maxmem = Return max quota size + * return: none + */ +inline void mpool_getquota(mpool_t * __restrict mp, unsigned long *currmem, + unsigned long *maxmem); +/* + * mpool_statistics() - Dump statistics from memory pool buckets + * + * @mp = Memory pool + * @cb = Export statistics to callback + * return: none + */ +void mpool_statistics(mpool_t * __restrict mp, mpool_stat_cb cb); /*