- added shm_available/pkg_available/{qm,fm}_available: return the ammount of
authorAndrei Pelinescu-Onciul <andrei@iptel.org>
Fri, 23 Feb 2007 23:20:51 +0000 (23:20 +0000)
committerAndrei Pelinescu-Onciul <andrei@iptel.org>
Fri, 23 Feb 2007 23:20:51 +0000 (23:20 +0000)
  free memory

mem/f_malloc.c
mem/f_malloc.h
mem/mem.h
mem/q_malloc.c
mem/q_malloc.h
mem/shm_mem.h

index ccf4d31..409f355 100644 (file)
@@ -38,6 +38,7 @@
  *              fixed initial size (andrei)
  *  2006-02-03  fixed realloc out of mem. free bug (andrei)
  *  2006-04-07  s/DBG/MDBG (andrei)
+ *  2007-02-23  added fm_available() (andrei)
  */
 
 
@@ -601,4 +602,19 @@ void fm_info(struct fm_block* qm, struct mem_info* info)
 }
 
 
+
+/* returns how much free memory is available
+ * on error (not compiled with bookkeeping code) returns (unsigned long)(-1) */
+unsigned long fm_available(struct fm_block* qm)
+{
+
+#if defined(DBG_F_MALLOC) || defined(MALLOC_STATS)
+       return qm->size-qm->real_used;
+#else
+       /* we don't know how much free memory we have and it's to expensive
+        * to compute it */
+       return ((unsigned long)-1);
+#endif
+}
+
 #endif
index a8c90a5..eee76a0 100644 (file)
@@ -139,5 +139,6 @@ void*  fm_realloc(struct fm_block*, void* p, unsigned long size);
 void  fm_status(struct fm_block*);
 void  fm_info(struct fm_block*, struct mem_info*);
 
+unsigned long fm_available(struct fm_block*);
 
 #endif
index 63c465c..702d830 100644 (file)
--- a/mem/mem.h
+++ b/mem/mem.h
@@ -33,6 +33,7 @@
  *               (andrei)
  *  2003-03-07  split init_malloc into init_pkg_mallocs & init_shm_mallocs 
  *               (andrei)
+ *  2007-02-23   added pkg_info() and pkg_available() (andrei)
  */
 
 
 #      ifdef VQ_MALLOC
 #              define pkg_status()  vqm_status(mem_block)
 #      elif defined F_MALLOC
-#              define pkg_status()  fm_status(mem_block)
+#              define pkg_status()    fm_status(mem_block)
+#              define pkg_info(mi)    fm_info(mem_block, mi)
+#              define pkg_available() fm_available(mem_block)
 #      else
-#              define pkg_status()  qm_status(mem_block)
+#              define pkg_status()    qm_status(mem_block)
+#              define pkg_info(mi)    qm_info(mem_block, mi)
+#              define pkg_available() qm_available(mem_block)
 #      endif
 #elif defined(SHM_MEM) && defined(USE_SHM_MEM)
 #      include "shm_mem.h"
index e22f69d..77f17d3 100644 (file)
@@ -39,6 +39,7 @@
  *              fixed initial size (andrei)
  *  2006-02-03  fixed realloc out of mem. free bug (andrei)
  *  2006-04-07  s/DBG/MDBG (andrei)
+ *  2007-02-23  added fm_available() (andrei)
  */
 
 
@@ -714,5 +715,12 @@ void qm_info(struct qm_block* qm, struct mem_info* info)
 }
 
 
+/* returns how much free memory is available
+ * it never returns an error (unlike fm_available) */
+unsigned long qm_available(struct qm_block* qm)
+{
+       return qm->size-qm->real_used;
+}
+
 
 #endif
index 0f107f6..11eb537 100644 (file)
@@ -150,5 +150,6 @@ void* qm_realloc(struct qm_block*, void* p, unsigned long size);
 void  qm_status(struct qm_block*);
 void  qm_info(struct qm_block*, struct mem_info*);
 
+unsigned long qm_available(struct qm_block* qm);
 
 #endif
index c6a16fc..bc0fed9 100644 (file)
@@ -31,7 +31,8 @@
  *  2003-06-29  added shm_realloc & replaced shm_resize (andrei)
  *  2003-11-19  reverted shm_resize to the old version, using
  *               realloc causes terrible fragmentation  (andrei)
- * 2005-03-02   added shm_info() & re-eneabled locking on shm_status (andrei)
+ *  2005-03-02   added shm_info() & re-eneabled locking on shm_status (andrei)
+ *  2007-02-23   added shm_available() (andrei)
  */
 
 
@@ -90,6 +91,7 @@
 #      define MY_STATUS fm_status
 #      define MY_MEMINFO       fm_info
 #      define  shm_malloc_init fm_malloc_init
+#      define shm_available() fm_available(shm_block)
 #else
 #      include "q_malloc.h"
        extern struct qm_block* shm_block;
 #      define MY_STATUS qm_status
 #      define MY_MEMINFO       qm_info
 #      define  shm_malloc_init qm_malloc_init
+#      define shm_available() qm_available(shm_block)
 #endif