aboutsummaryrefslogtreecommitdiffstats
path: root/util/memory.c
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--util/memory.c44
1 files changed, 43 insertions, 1 deletions
diff --git a/util/memory.c b/util/memory.c
index 013bd55cc..586a744ec 100644
--- a/util/memory.c
+++ b/util/memory.c
@@ -80,6 +80,10 @@ const void membug( const char *fmt, ... );
#endif
+#ifdef M_GUARD
+static long used_memory;
+#endif
+
#ifdef M_DEBUG /* stuff used for memory debuging */
struct info_entry {
@@ -302,6 +306,7 @@ dump_table( void)
sum, chunks );
}
+
static void
check_allmem( const char *info )
{
@@ -333,6 +338,40 @@ membug( const char *fmt, ... )
}
+void
+m_print_stats( const char *prefix )
+{
+ #ifdef M_DEBUG
+ unsigned n;
+ struct memtbl_entry *e;
+ ulong sum = 0, chunks =0;
+
+ for( e = memtbl, n = 0; n < memtbl_len; n++, e++ ) {
+ if(e->inuse) {
+ sum += e->user_n;
+ chunks++;
+ }
+ }
+
+ log_debug( "%s%smemstat: %8lu bytes in %ld chunks used\n",
+ prefix? prefix:"", prefix? ": ":"", sum, chunks );
+ #elif defined(M_GUARD)
+ log_debug( "%s%smemstat: %8ld bytes\n",
+ prefix? prefix:"", prefix? ": ":"", used_memory );
+ #endif
+}
+
+void
+m_dump_table( const char *prefix )
+{
+ #if M_DEBUG
+ fprintf(stderr,"Memory-Table-Dump: %s\n", prefix);
+ dump_table();
+ #endif
+ m_print_stats( prefix );
+}
+
+
static void
out_of_core(size_t n, int secure)
{
@@ -354,6 +393,7 @@ FNAME(alloc)( size_t n FNAMEPRT )
if( !(p = malloc( n + EXTRA_ALIGN+5 )) )
out_of_core(n,0);
store_len(p,n,0);
+ used_memory += n;
p[4+EXTRA_ALIGN+n] = MAGIC_END_BYTE;
return p+EXTRA_ALIGN+4;
#else
@@ -457,8 +497,10 @@ FNAME(free)( void *a FNAMEPRT )
m_check(p);
if( m_is_secure(a) )
secmem_free(p-EXTRA_ALIGN-4);
- else
+ else {
+ used_memory -= m_size(a);
free(p-EXTRA_ALIGN-4);
+ }
#else
if( m_is_secure(a) )
secmem_free(p);