From 891998e0c31e85552fb97541859ada736f8e4d9f Mon Sep 17 00:00:00 2001
From: Paul Bakker
Date: Wed, 3 Jul 2013 14:45:05 +0200
Subject: [PATCH] Added extra debug information to memory_buffer_alloc_status()
---
library/memory_buffer_alloc.c | 35 +++++++++++++++++++++++++++++++++++
1 file changed, 35 insertions(+)
diff --git a/library/memory_buffer_alloc.c b/library/memory_buffer_alloc.c
index c7df7b4111..e9068ae028 100644
--- a/library/memory_buffer_alloc.c
+++ b/library/memory_buffer_alloc.c
@@ -65,6 +65,13 @@ typedef struct
size_t largest_free;
size_t current_alloc_size;
int verify;
+#if defined(POLARSSL_MEMORY_DEBUG)
+ size_t malloc_count;
+ size_t free_count;
+ size_t total_used;
+ size_t maximum_used;
+ size_t header_count;
+#endif
}
buffer_alloc_ctx;
@@ -206,12 +213,21 @@ static void *buffer_alloc_malloc( size_t len )
if( cur == NULL )
return( NULL );
+#if defined(POLARSSL_MEMORY_DEBUG)
+ heap.malloc_count++;
+#endif
+
// Found location, split block if > memory_header + 4 room left
//
if( cur->size - len < sizeof(memory_header) + POLARSSL_MEMORY_ALIGN_MULTIPLE )
{
cur->alloc = 1;
+#if defined(POLARSSL_MEMORY_DEBUG)
+ heap.total_used += cur->size;
+ if( heap.total_used > heap.maximum_used)
+ heap.maximum_used = heap.total_used;
+#endif
#if defined(POLARSSL_MEMORY_BACKTRACE)
trace_cnt = backtrace( trace_buffer, MAX_BT );
cur->trace = backtrace_symbols( trace_buffer, trace_cnt );
@@ -245,6 +261,12 @@ static void *buffer_alloc_malloc( size_t len )
cur->size = len;
cur->next = new;
+#if defined(POLARSSL_MEMORY_DEBUG)
+ heap.header_count++;
+ heap.total_used += cur->size;
+ if( heap.total_used > heap.maximum_used)
+ heap.maximum_used = heap.total_used;
+#endif
#if defined(POLARSSL_MEMORY_BACKTRACE)
trace_cnt = backtrace( trace_buffer, MAX_BT );
cur->trace = backtrace_symbols( trace_buffer, trace_cnt );
@@ -290,10 +312,18 @@ static void buffer_alloc_free( void *ptr )
hdr->alloc = 0;
+#if defined(POLARSSL_MEMORY_DEBUG)
+ heap.free_count++;
+ heap.total_used -= hdr->size;
+#endif
+
// Regroup with block before
//
if( hdr->prev != NULL && hdr->prev->alloc == 0 )
{
+#if defined(POLARSSL_MEMORY_DEBUG)
+ heap.header_count--;
+#endif
hdr->prev->size += sizeof(memory_header) + hdr->size;
hdr->prev->next = hdr->next;
old = hdr;
@@ -312,6 +342,9 @@ static void buffer_alloc_free( void *ptr )
//
if( hdr->next != NULL && hdr->next->alloc == 0 )
{
+#if defined(POLARSSL_MEMORY_DEBUG)
+ heap.header_count--;
+#endif
hdr->size += sizeof(memory_header) + hdr->next->size;
old = hdr->next;
hdr->next = hdr->next->next;
@@ -342,6 +375,8 @@ int memory_buffer_alloc_verify()
#if defined(POLARSSL_MEMORY_DEBUG)
void memory_buffer_alloc_status()
{
+ fprintf(stderr, "Current use: %u blocks / %u bytes, max: %u bytes, malloc / free: %u / %u\n", heap.header_count, heap.total_used, heap.maximum_used, heap.malloc_count, heap.free_count);
+
if( heap.first->next == NULL )
fprintf(stderr, "All memory de-allocated in stack buffer\n");
else