2
0
Эх сурвалжийг харах

- added shm_available/pkg_available/{qm,fm}_available: return the ammount of
free memory

Andrei Pelinescu-Onciul 18 жил өмнө
parent
commit
8799e028d5
6 өөрчлөгдсөн 37 нэмэгдсэн , 3 устгасан
  1. 16 0
      mem/f_malloc.c
  2. 1 0
      mem/f_malloc.h
  3. 7 2
      mem/mem.h
  4. 8 0
      mem/q_malloc.c
  5. 1 0
      mem/q_malloc.h
  6. 4 1
      mem/shm_mem.h

+ 16 - 0
mem/f_malloc.c

@@ -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

+ 1 - 0
mem/f_malloc.h

@@ -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

+ 7 - 2
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)
  */
 
 
@@ -110,9 +111,13 @@
 #	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"

+ 8 - 0
mem/q_malloc.c

@@ -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

+ 1 - 0
mem/q_malloc.h

@@ -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

+ 4 - 1
mem/shm_mem.h

@@ -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;
@@ -99,6 +101,7 @@
 #	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