Added extra debug information to memory_buffer_alloc_status()
This commit is contained in:
parent
bd5524471a
commit
891998e0c3
1 changed files with 35 additions and 0 deletions
|
@ -65,6 +65,13 @@ typedef struct
|
||||||
size_t largest_free;
|
size_t largest_free;
|
||||||
size_t current_alloc_size;
|
size_t current_alloc_size;
|
||||||
int verify;
|
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;
|
buffer_alloc_ctx;
|
||||||
|
|
||||||
|
@ -206,12 +213,21 @@ static void *buffer_alloc_malloc( size_t len )
|
||||||
if( cur == NULL )
|
if( cur == NULL )
|
||||||
return( NULL );
|
return( NULL );
|
||||||
|
|
||||||
|
#if defined(POLARSSL_MEMORY_DEBUG)
|
||||||
|
heap.malloc_count++;
|
||||||
|
#endif
|
||||||
|
|
||||||
// Found location, split block if > memory_header + 4 room left
|
// Found location, split block if > memory_header + 4 room left
|
||||||
//
|
//
|
||||||
if( cur->size - len < sizeof(memory_header) + POLARSSL_MEMORY_ALIGN_MULTIPLE )
|
if( cur->size - len < sizeof(memory_header) + POLARSSL_MEMORY_ALIGN_MULTIPLE )
|
||||||
{
|
{
|
||||||
cur->alloc = 1;
|
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)
|
#if defined(POLARSSL_MEMORY_BACKTRACE)
|
||||||
trace_cnt = backtrace( trace_buffer, MAX_BT );
|
trace_cnt = backtrace( trace_buffer, MAX_BT );
|
||||||
cur->trace = backtrace_symbols( trace_buffer, trace_cnt );
|
cur->trace = backtrace_symbols( trace_buffer, trace_cnt );
|
||||||
|
@ -245,6 +261,12 @@ static void *buffer_alloc_malloc( size_t len )
|
||||||
cur->size = len;
|
cur->size = len;
|
||||||
cur->next = new;
|
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)
|
#if defined(POLARSSL_MEMORY_BACKTRACE)
|
||||||
trace_cnt = backtrace( trace_buffer, MAX_BT );
|
trace_cnt = backtrace( trace_buffer, MAX_BT );
|
||||||
cur->trace = backtrace_symbols( trace_buffer, trace_cnt );
|
cur->trace = backtrace_symbols( trace_buffer, trace_cnt );
|
||||||
|
@ -290,10 +312,18 @@ static void buffer_alloc_free( void *ptr )
|
||||||
|
|
||||||
hdr->alloc = 0;
|
hdr->alloc = 0;
|
||||||
|
|
||||||
|
#if defined(POLARSSL_MEMORY_DEBUG)
|
||||||
|
heap.free_count++;
|
||||||
|
heap.total_used -= hdr->size;
|
||||||
|
#endif
|
||||||
|
|
||||||
// Regroup with block before
|
// Regroup with block before
|
||||||
//
|
//
|
||||||
if( hdr->prev != NULL && hdr->prev->alloc == 0 )
|
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->size += sizeof(memory_header) + hdr->size;
|
||||||
hdr->prev->next = hdr->next;
|
hdr->prev->next = hdr->next;
|
||||||
old = hdr;
|
old = hdr;
|
||||||
|
@ -312,6 +342,9 @@ static void buffer_alloc_free( void *ptr )
|
||||||
//
|
//
|
||||||
if( hdr->next != NULL && hdr->next->alloc == 0 )
|
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;
|
hdr->size += sizeof(memory_header) + hdr->next->size;
|
||||||
old = hdr->next;
|
old = hdr->next;
|
||||||
hdr->next = hdr->next->next;
|
hdr->next = hdr->next->next;
|
||||||
|
@ -342,6 +375,8 @@ int memory_buffer_alloc_verify()
|
||||||
#if defined(POLARSSL_MEMORY_DEBUG)
|
#if defined(POLARSSL_MEMORY_DEBUG)
|
||||||
void memory_buffer_alloc_status()
|
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 )
|
if( heap.first->next == NULL )
|
||||||
fprintf(stderr, "All memory de-allocated in stack buffer\n");
|
fprintf(stderr, "All memory de-allocated in stack buffer\n");
|
||||||
else
|
else
|
||||||
|
|
Loading…
Reference in a new issue