diff --git a/src/core/mem/mem.c b/src/core/mem/mem.c index e2465214235..9af7e5052a5 100644 --- a/src/core/mem/mem.c +++ b/src/core/mem/mem.c @@ -39,93 +39,3 @@ #endif #include "shm_mem.h" - -#if 0 - -#ifdef PKG_MALLOC - #ifndef DL_MALLOC - char* mem_pool = 0; - #endif - - #ifdef F_MALLOC - struct fm_block* mem_block = 0; - #elif defined DL_MALLOC - /* don't need this */ - #elif defined TLSF_MALLOC - tlsf_t mem_block = 0; - #else - struct qm_block* mem_block = 0; - #endif -#endif - - -/** - * \brief Initialize private memory pool - * \return 0 if the memory allocation was successful, -1 otherwise - */ -int init_pkg_mallocs(void) -{ -#ifdef PKG_MALLOC - /*init mem*/ - #ifndef DL_MALLOC - if (pkg_mem_size == 0) - pkg_mem_size = PKG_MEM_POOL_SIZE; - mem_pool = malloc(pkg_mem_size); - #endif - #ifdef F_MALLOC - if (mem_pool) - mem_block=fm_malloc_init(mem_pool, pkg_mem_size, MEM_TYPE_PKG); - #elif DL_MALLOC - /* don't need this */ - #elif TLSF_MALLOC - mem_block = tlsf_create_with_pool(mem_pool, pkg_mem_size); - #else - if (mem_pool) - mem_block=qm_malloc_init(mem_pool, pkg_mem_size, MEM_TYPE_PKG); - #endif - #ifndef DL_MALLOC - if (mem_block==0){ - LOG(L_CRIT, "could not initialize memory pool\n"); - fprintf(stderr, "Too much pkg memory demanded: %ld bytes\n", - pkg_mem_size); - return -1; - } - #endif -#endif - return 0; -} - - - -/** - * \brief Destroy private memory pool - */ -void destroy_pkg_mallocs(void) -{ -#ifdef PKG_MALLOC - #ifndef DL_MALLOC - if (mem_pool) { - free(mem_pool); - mem_pool = 0; - } - #endif -#endif /* PKG_MALLOC */ -} - - -/** - * \brief Initialize shared memory pool - * \param force_alloc Force allocation of memory, e.g. initialize complete block with zero - * \return 0 if the memory allocation was successful, -1 otherwise - */ -int init_shm_mallocs(int force_alloc) -{ - if (shm_mem_init(force_alloc)<0) { - LOG(L_CRIT, "could not initialize shared memory pool, exiting...\n"); - fprintf(stderr, "Too much shared memory demanded: %ld\n", - shm_mem_size ); - return -1; - } - return 0; -} -#endif diff --git a/src/core/mem/mem.h b/src/core/mem/mem.h index 83c03b8d98f..c11f8911180 100644 --- a/src/core/mem/mem.h +++ b/src/core/mem/mem.h @@ -42,155 +42,6 @@ #include "pkg.h" -#if 0 -/* fix debug defines, DBG_F_MALLOC <=> DBG_QM_MALLOC */ -#ifdef F_MALLOC - #ifdef DBG_F_MALLOC - #ifndef DBG_QM_MALLOC - #define DBG_QM_MALLOC - #endif - #elif defined(DBG_QM_MALLOC) - #define DBG_F_MALLOC - #endif -#elif defined TLSF_MALLOC - #ifdef DBG_TLSF_MALLOC - #ifndef DBG_QM_MALLOC - #define DBG_QM_MALLOC - #endif - #elif defined(DBG_QM_MALLOC) - #define DBG_TLSF_MALLOC - #endif -#endif - -#ifdef PKG_MALLOC -# ifdef F_MALLOC -# include "f_malloc.h" - extern struct fm_block* mem_block; -# elif defined DL_MALLOC -# include "dl_malloc.h" -# elif defined TLSF_MALLOC -# include "tlsf.h" - extern tlsf_t mem_block; -# else -# include "q_malloc.h" - extern struct qm_block* mem_block; -# endif - - extern char* mem_pool; - - -# ifdef DBG_QM_MALLOC - -# include "src_loc.h" /* src location macros: _SRC_* */ -# ifdef F_MALLOC -# define pkg_malloc(s) fm_malloc(mem_block, (s), _SRC_LOC_, \ - _SRC_FUNCTION_, _SRC_LINE_) -# define pkg_free(p) fm_free(mem_block, (p), _SRC_LOC_, \ - _SRC_FUNCTION_, _SRC_LINE_) -# define pkg_realloc(p, s) fm_realloc(mem_block, (p), (s), \ - _SRC_LOC_, _SRC_FUNCTION_, _SRC_LINE_) -# elif defined TLSF_MALLOC -# define pkg_malloc(s) tlsf_malloc(mem_block, (s), _SRC_LOC_, \ - _SRC_FUNCTION_, _SRC_LINE_) -# define pkg_free(p) tlsf_free(mem_block, (p), _SRC_LOC_, \ - _SRC_FUNCTION_, _SRC_LINE_) -# define pkg_realloc(p, s) tlsf_realloc(mem_block, (p), (s), \ - _SRC_LOC_, _SRC_FUNCTION_, _SRC_LINE_) -# else -# define pkg_malloc(s) qm_malloc(mem_block, (s),_SRC_LOC_, \ - _SRC_FUNCTION_, _SRC_LINE_) -# define pkg_realloc(p, s) qm_realloc(mem_block, (p), (s), \ - _SRC_LOC_, _SRC_FUNCTION_, _SRC_LINE_) -# define pkg_free(p) qm_free(mem_block, (p), _SRC_LOC_, \ - _SRC_FUNCTION_, _SRC_LINE_) -# endif -# else -# ifdef F_MALLOC -# define pkg_malloc(s) fm_malloc(mem_block, (s)) -# define pkg_realloc(p, s) fm_realloc(mem_block, (p), (s)) -# define pkg_free(p) fm_free(mem_block, (p)) -# elif defined DL_MALLOC -# define pkg_malloc(s) dlmalloc((s)) -# define pkg_realloc(p, s) dlrealloc((p), (s)) -# define pkg_free(p) dlfree((p)) -# elif defined TLSF_MALLOC -# define pkg_malloc(s) tlsf_malloc(mem_block, (s)) -# define pkg_realloc(p, s) tlsf_realloc(mem_block, (p), (s)) -# define pkg_free(p) tlsf_free(mem_block, (p)) -# else -# define pkg_malloc(s) qm_malloc(mem_block, (s)) -# define pkg_realloc(p, s) qm_realloc(mem_block, (p), (s)) -# define pkg_free(p) qm_free(mem_block, (p)) -# endif -# endif -# ifdef F_MALLOC -# define pkg_status() fm_status(mem_block) -# define pkg_info(mi) fm_info(mem_block, mi) -# define pkg_available() fm_available(mem_block) -# define pkg_sums() fm_sums(mem_block) -# elif defined DL_MALLOC -# define pkg_status() 0 -# define pkg_info(mi) 0 -# define pkg_available() 0 -# define pkg_sums() 0 -# elif defined TLSF_MALLOC -# define pkg_status() tlsf_status(mem_block) -# define pkg_info(mi) tlsf_meminfo(mem_block, (mi)) -# define pkg_available() tlsf_available(mem_block) -# define pkg_sums() tlsf_sums(mem_block) -# else -# define pkg_status() qm_status(mem_block) -# define pkg_info(mi) qm_info(mem_block, mi) -# define pkg_available() qm_available(mem_block) -# define pkg_sums() qm_sums(mem_block) -# endif -#elif defined(SHM_MEM) && defined(USE_SHM_MEM) -# include "shm_mem.h" -# define pkg_malloc(s) shm_malloc((s)) -# define pkg_relloc(p, s) shm_malloc((p), (s)) -# define pkg_free(p) shm_free((p)) -# define pkg_status() shm_status() -# define pkg_sums() shm_sums() -#else -# include -# include "memdbg.h" -# ifdef DBG_SYS_MALLOC -# define pkg_malloc(s) \ - ( { void *____v123; ____v123=malloc((s)); \ - MDBG("malloc %p size %lu end %p (%s:%d)\n", ____v123, (unsigned long)(s), (char*)____v123+(s), __FILE__, __LINE__);\ - ____v123; } ) -# define pkg_realloc(p, s) \ - ( { void *____v123; ____v123=realloc(p, s); \ - MDBG("realloc %p size %lu end %p (%s:%d)\n", ____v123, (unsigned long)(s), (char*)____v123+(s), __FILE__, __LINE__);\ - ____v123; } ) -# define pkg_free(p) do{ MDBG("free %p (%s:%d)\n", (p), __FILE__, __LINE__); free((p)); }while(0) -# else -# define pkg_malloc(s) malloc((s)) -# define pkg_realloc(p, s) realloc((p), (s)) -# define pkg_free(p) free((p)) -# endif -# define pkg_status() -# define pkg_sums() -#endif - -/** - * \brief Initialize private memory pool - * \return 0 if the memory allocation was successful, -1 otherwise - */ -int init_pkg_mallocs(void); - -/** - * \brief Destroy private memory pool - */ -void destroy_pkg_mallocs(void); - -/** - * \brief Initialize shared memory pool - * \param force_alloc Force allocation of memory, e.g. initialize complete block with zero - * \return 0 if the memory allocation was successful, -1 otherwise - */ -int init_shm_mallocs(int force_alloc); -#endif /** generic logging helper for allocation errors in private memory pool/ system */ #ifdef SYS_MALLOC diff --git a/src/core/mem/shm_mem.c b/src/core/mem/shm_mem.c index 88168faabf4..a94b79889e6 100644 --- a/src/core/mem/shm_mem.c +++ b/src/core/mem/shm_mem.c @@ -23,246 +23,3 @@ */ -#if 0 - -#include - -#include "shm_mem.h" -#include "../config.h" -#include "../globals.h" -#include "memdbg.h" - -#ifdef SHM_MMAP - -#include -#include -#include /*open*/ -#include -#include - -#endif - -#define _ROUND2TYPE(s, type) \ - (((s)+(sizeof(type)-1))&(~(sizeof(type)-1))) -#define _ROUND_LONG(s) _ROUND2TYPE(s, long) - - -#ifndef SHM_MMAP -static int shm_shmid=-1; /*shared memory id*/ -#endif - -#ifndef SHM_SAFE_MALLOC -gen_lock_t* mem_lock=0; -#endif - -static void* shm_mempool=(void*)-1; -#ifdef LL_MALLOC - struct sfm_block* shm_block; -#elif SF_MALLOC - struct sfm_block* shm_block; -#elif F_MALLOC - struct fm_block* shm_block; -#elif DL_MALLOC - mspace shm_block; -#elif TLSF_MALLOC - tlsf_t shm_block; -#else - struct qm_block* shm_block; -#endif - - -inline static void* sh_realloc(void* p, unsigned int size) -{ - void *r; - shm_lock(); - shm_free_unsafe(p); - r=shm_malloc_unsafe(size); - shm_unlock(); - return r; -} - -/* look at a buffer if there is perhaps enough space for the new size - (It is beneficial to do so because vq_malloc is pretty stateful - and if we ask for a new buffer size, we can still make it happy - with current buffer); if so, we return current buffer again; - otherwise, we free it, allocate a new one and return it; no - guarantee for buffer content; if allocation fails, we return - NULL -*/ - -#ifdef DBG_QM_MALLOC -void* _shm_resize( void* p, unsigned int s, const char* file, const char* func, - int line, const char *mname) -#else -void* _shm_resize( void* p , unsigned int s) -#endif -{ - if (p==0) { - DBG("WARNING:vqm_resize: resize(0) called\n"); - return shm_malloc( s ); - } - return sh_realloc( p, s ); -} - - - - - -int shm_getmem(void) -{ - -#ifdef SHM_MMAP -#ifndef USE_ANON_MMAP - int fd; -#endif -#else - struct shmid_ds shm_info; -#endif - -#ifdef SHM_MMAP - if (shm_mempool && (shm_mempool!=(void*)-1)){ -#else - if ((shm_shmid!=-1)||(shm_mempool!=(void*)-1)){ -#endif - LOG(L_CRIT, "BUG: shm_mem_init: shm already initialized\n"); - return -1; - } - -#ifdef SHM_MMAP -#ifdef USE_ANON_MMAP - shm_mempool=mmap(0, shm_mem_size, PROT_READ|PROT_WRITE, - MAP_ANON|MAP_SHARED, -1 ,0); -#else - fd=open("/dev/zero", O_RDWR); - if (fd==-1){ - LOG(L_CRIT, "ERROR: shm_mem_init: could not open /dev/zero: %s\n", - strerror(errno)); - return -1; - } - shm_mempool=mmap(0, shm_mem_size, PROT_READ|PROT_WRITE, MAP_SHARED, fd ,0); - /* close /dev/zero */ - close(fd); -#endif /* USE_ANON_MMAP */ -#else - - shm_shmid=shmget(IPC_PRIVATE, /* SHM_MEM_SIZE */ shm_mem_size , 0700); - if (shm_shmid==-1){ - LOG(L_CRIT, "ERROR: shm_mem_init: could not allocate shared memory" - " segment: %s\n", strerror(errno)); - return -1; - } - shm_mempool=shmat(shm_shmid, 0, 0); -#endif - if (shm_mempool==(void*)-1){ - LOG(L_CRIT, "ERROR: shm_mem_init: could not attach shared memory" - " segment: %s\n", strerror(errno)); - /* destroy segment*/ - shm_mem_destroy(); - return -1; - } - return 0; -} - - - -int shm_mem_init_mallocs(void* mempool, unsigned long pool_size) -{ - /* init it for malloc*/ - shm_block=shm_malloc_init(mempool, pool_size, MEM_TYPE_SHM); - if (shm_block==0){ - LOG(L_CRIT, "ERROR: shm_mem_init: could not initialize shared" - " malloc\n"); - shm_mem_destroy(); - return -1; - } -#ifndef SHM_SAFE_MALLOC - mem_lock=shm_malloc_unsafe(sizeof(gen_lock_t)); /* skip lock_alloc, - race cond*/ - if (mem_lock==0){ - LOG(L_CRIT, "ERROR: shm_mem_init: could not allocate lock\n"); - shm_mem_destroy(); - return -1; - } - if (lock_init(mem_lock)==0){ - LOG(L_CRIT, "ERROR: shm_mem_init: could not initialize lock\n"); - shm_mem_destroy(); - return -1; - } -#endif /*SHM SAFE_MALLOC */ - - DBG("shm_mem_init: success\n"); - - return 0; -} - - -int shm_mem_init(int force_alloc) -{ - int ret; - long sz; - long* p; - long* end; - - ret=shm_getmem(); - if (ret<0) return ret; - if (force_alloc){ - sz=sysconf(_SC_PAGESIZE); - DBG("shm_mem_init: %ld bytes/page\n", sz); - if ((sz -#include -#include -#include - -#ifndef SHM_MMAP - -#include - -#endif - -#include -#include -#include - -/* fix DBG MALLOC stuff */ - -/* fix debug defines, DBG_F_MALLOC <=> DBG_QM_MALLOC */ -#ifdef F_MALLOC - #ifdef DBG_F_MALLOC - #ifndef DBG_QM_MALLOC - #define DBG_QM_MALLOC - #endif - #elif defined(DBG_QM_MALLOC) - #define DBG_F_MALLOC - #endif -#elif defined TLSF_MALLOC - #ifdef DBG_TLSF_MALLOC - #ifndef DBG_QM_MALLOC - #define DBG_QM_MALLOC - #endif - #elif defined(DBG_QM_MALLOC) - #define DBG_TLSF_MALLOC - #endif -#endif - - - -#include "../dprint.h" -#include "../lock_ops.h" /* we don't include locking.h on purpose */ - -#ifdef LL_MALLOC -# include "ll_malloc.h" -# define SHM_SAFE_MALLOC /* no need to lock */ - extern struct sfm_block* shm_block; -#ifdef __SUNPRO_C -# define shm_malloc(...) sfm_malloc(shm_block, __VA_ARGS__) -# define shm_free(...) sfm_free(shm_block, __VA_ARGS__) -# define shm_realloc(...) sfm_malloc(shm_block, __VA_ARGS__) - /* WARNING: test, especially if switched to real realloc */ -# define shm_resize(...) sfm_realloc(shm_block, __VA_ARGS__) -# define shm_info(...) sfm_info(shm_block, __VA_ARGS__) -#else /* __SUNPRO_C */ -# define shm_malloc(args...) sfm_malloc(shm_block, ## args) -# define shm_free(args...) sfm_free(shm_block, ## args) -# define shm_realloc(args...) sfm_malloc(shm_block, ## args) - /* WARNING: test, especially if switched to real realloc */ -# define shm_resize(args...) sfm_realloc(shm_block, ## args) -# define shm_info(args...) sfm_info(shm_block, ## args) -#endif /* __SUNPRO_C */ -# define shm_malloc_unsafe shm_malloc -# define shm_free_unsafe shm_free -# define shm_available sfm_available(shm_block) -# define shm_status() sfm_status(shm_block) -# define shm_sums() do{}while(0) -# define shm_malloc_init sfm_malloc_init -# define shm_malloc_destroy(b) sfm_malloc_destroy(b) -# define shm_malloc_on_fork() sfm_pool_reset() -#elif SF_MALLOC -# include "sf_malloc.h" -# define SHM_SAFE_MALLOC /* no need to lock */ - extern struct sfm_block* shm_block; -#ifdef __SUNPRO_C -# define shm_malloc(...) sfm_malloc(shm_block, __VA_ARGS__) -# define shm_free(...) sfm_free(shm_block, __VA_ARGS__) -# define shm_realloc(...) sfm_malloc(shm_block, __VA_ARGS__) - /* WARNING: test, especially if switched to real realloc */ -# define shm_resize(...) sfm_realloc(shm_block, __VA_ARGS__) -# define shm_info(...) sfm_info(shm_block, __VA_ARGS__) -#else /* __SUNPRO_C */ -# define shm_malloc(args...) sfm_malloc(shm_block, ## args) -# define shm_free(args...) sfm_free(shm_block, ## args) -# define shm_realloc(args...) sfm_malloc(shm_block, ## args) - /* WARNING: test, especially if switched to real realloc */ -# define shm_resize(args...) sfm_realloc(shm_block, ## args) -# define shm_info(args...) sfm_info(shm_block, ## args) -#endif /* __SUNPRO_C */ -# define shm_malloc_unsafe shm_malloc -# define shm_free_unsafe shm_free -# define shm_available sfm_available(shm_block) -# define shm_status() sfm_status(shm_block) -# define shm_sums() do{}while(0) -# define shm_malloc_init sfm_malloc_init -# define shm_malloc_destroy(b) sfm_malloc_destroy(b) -# define shm_malloc_on_fork() sfm_pool_reset() -#elif defined F_MALLOC -# include "f_malloc.h" - extern struct fm_block* shm_block; -# define MY_MALLOC fm_malloc -# define MY_FREE fm_free -# define MY_REALLOC fm_realloc -# define MY_STATUS fm_status -# define MY_MEMINFO fm_info -# define MY_SUMS fm_sums -# define shm_malloc_init fm_malloc_init -# define shm_malloc_destroy(b) do{}while(0) -# define shm_available() fm_available(shm_block) -# define shm_malloc_on_fork() do{}while(0) -#elif defined DL_MALLOC -# include "dl_malloc.h" - extern mspace shm_block; -# define MY_MALLOC mspace_malloc -# define MY_FREE mspace_free -# define MY_REALLOC mspace_realloc -# define MY_STATUS(...) 0 -# define MY_SUMS do{}while(0) -# define MY_MEMINFO mspace_info -# define shm_malloc_init(buf, len, type) create_mspace_with_base(buf, len, 0) -# define shm_malloc_destroy(b) do{}while(0) -# define shm_malloc_on_fork() do{}while(0) -#elif defined TLSF_MALLOC -# include "tlsf.h" - extern pool_t shm_block; -# define MY_MALLOC tlsf_malloc -# define MY_FREE tlsf_free -# define MY_REALLOC tlsf_realloc -# define MY_STATUS tlsf_status -# define MY_MEMINFO tlsf_meminfo -# define MY_SUMS tlsf_sums -# define shm_malloc_init(mem, bytes, type) tlsf_create_with_pool((void*) mem, bytes) -# define shm_malloc_destroy(b) do{}while(0) -# define shm_available() tlsf_available(shm_block) -# define shm_malloc_on_fork() do{}while(0) -#else -# include "q_malloc.h" - extern struct qm_block* shm_block; -# define MY_MALLOC qm_malloc -# define MY_FREE qm_free -# define MY_REALLOC qm_realloc -# define MY_STATUS qm_status -# define MY_MEMINFO qm_info -# define MY_SUMS qm_sums -# define shm_malloc_init qm_malloc_init -# define shm_malloc_destroy(b) do{}while(0) -# define shm_available() qm_available(shm_block) -# define shm_malloc_on_fork() do{}while(0) -#endif - -#ifndef SHM_SAFE_MALLOC - extern gen_lock_t* mem_lock; -#endif - - -int shm_mem_init(int); /* calls shm_getmem & shm_mem_init_mallocs */ -int shm_getmem(void); /* allocates the memory (mmap or sysv shmap) */ -int shm_mem_init_mallocs(void* mempool, unsigned long size); /* initialize - the mallocs - & the lock */ -void shm_mem_destroy(void); - - - -#ifdef SHM_SAFE_MALLOC -#define shm_lock() do{}while(0) -#define shm_unlock() do{}while(0) - -#else /* ! SHM_SAFE_MALLOC */ - -#define shm_lock() lock_get(mem_lock) -#define shm_unlock() lock_release(mem_lock) - -#ifdef DBG_QM_MALLOC - -#include "src_loc.h" - -#define shm_malloc_unsafe(_size ) \ - MY_MALLOC(shm_block, (_size), _SRC_LOC_, _SRC_FUNCTION_, _SRC_LINE_, _SRC_MODULE_) - - -inline static void* _shm_malloc(unsigned int size, - const char *file, const char *function, int line, const char *mname) -{ - void *p; - - shm_lock(); - p=MY_MALLOC(shm_block, size, file, function, line, mname); - shm_unlock(); - return p; -} - - -inline static void* _shm_realloc(void *ptr, unsigned int size, - const char* file, const char* function, int line, const char *mname) -{ - void *p; - shm_lock(); - p=MY_REALLOC(shm_block, ptr, size, file, function, line, mname); - shm_unlock(); - return p; -} - -#define shm_malloc( _size ) _shm_malloc((_size), \ - _SRC_LOC_, _SRC_FUNCTION_, _SRC_LINE_ , _SRC_MODULE_) - -#define shm_realloc( _ptr, _size ) _shm_realloc( (_ptr), (_size), \ - _SRC_LOC_, _SRC_FUNCTION_, _SRC_LINE_, _SRC_MODULE_) - - - -#define shm_free_unsafe( _p ) \ - MY_FREE( shm_block, (_p), _SRC_LOC_, _SRC_FUNCTION_, _SRC_LINE_, _SRC_MODULE_) - -#define shm_free(_p) \ -do { \ - shm_lock(); \ - shm_free_unsafe( (_p)); \ - shm_unlock(); \ -}while(0) - - - -void* _shm_resize(void* ptr, unsigned int size, const char* f, const char* fn, - int line, const char *mname); -#define shm_resize(_p, _s ) _shm_resize((_p), (_s), \ - _SRC_LOC_, _SRC_FUNCTION_, _SRC_LINE_, _SRC_MODULE_) -/*#define shm_resize(_p, _s ) shm_realloc( (_p), (_s))*/ - - - -#else /*DBQ_QM_MALLOC*/ - - -#define shm_malloc_unsafe(_size) MY_MALLOC(shm_block, (_size)) - -inline static void* shm_malloc(unsigned int size) -{ - void *p; - - shm_lock(); - p=shm_malloc_unsafe(size); - shm_unlock(); - return p; -} - - -inline static void* shm_realloc(void *ptr, unsigned int size) -{ - void *p; - shm_lock(); - p=MY_REALLOC(shm_block, ptr, size); - shm_unlock(); - return p; -} - - - -#define shm_free_unsafe( _p ) MY_FREE(shm_block, (_p)) - -#define shm_free(_p) \ -do { \ - shm_lock(); \ - shm_free_unsafe( _p ); \ - shm_unlock(); \ -}while(0) - - - -void* _shm_resize(void* ptr, unsigned int size); -#define shm_resize(_p, _s) _shm_resize( (_p), (_s)) -/*#define shm_resize(_p, _s) shm_realloc( (_p), (_s))*/ - - -#endif /* DBG_QM_MALLOC */ - - -#define shm_status() \ -do { \ - shm_lock(); \ - MY_STATUS(shm_block); \ - shm_unlock(); \ -}while(0) - - -#define shm_info(mi) \ -do{\ - shm_lock(); \ - MY_MEMINFO(shm_block, mi); \ - shm_unlock(); \ -}while(0) - -#ifdef MY_SUMS -#define shm_sums() \ - do { \ - shm_lock(); \ - MY_SUMS(shm_block); \ - shm_unlock(); \ - }while(0) - -#endif /* MY_SUMS */ - -#endif /* ! SHM_SAFE_MALLOC */ - -/* multi-process safe version of shm_available() - */ -unsigned long shm_available_safe(); - -#endif - #endif /* shm_mem_h */