Browse Source

Trace functions for BIGBLOCK raw blocks

Ioannis Koutras 12 years ago
parent
commit
dc6c6ddf83
2 changed files with 18 additions and 4 deletions
  1. 2 3
      src/bitmap/bitmap_malloc.c
  2. 16 1
      src/dmmlib.c

+ 2 - 3
src/bitmap/bitmap_malloc.c

@@ -111,10 +111,9 @@ void * bitmap_malloc(raw_block_header_t *raw_block, size_t req_size) {
 
             ret = (void *)((char *)chunk_address + CHUNK_HDR_SIZE);
 
-            TRACE_1("dmmlib - malloc - allocated %zu bytes for a memory request"
-                    " of %zu bytes at bitmap raw block %p...\n",
+            TRACE_1("dmmlib - malloc - allocated %zu bytes"
+                    " at bitmap raw block %p\n",
                     cells * rb_header->bytes_per_cell,
-                    req_size - CHUNK_HDR_SIZE,
                     (void *)raw_block);
 
 #ifdef WITH_STATS

+ 16 - 1
src/dmmlib.c

@@ -36,6 +36,8 @@
 #include <stdbool.h>
 #include <string.h> /* for memset() */
 
+#include "trace.h"
+
 void * malloc(size_t size) {
     raw_block_header_t *raw_block, *new_raw_block;
     size_t allocation_size;
@@ -43,6 +45,8 @@ void * malloc(size_t size) {
 
     raw_block = systemallocator.raw_block_head;
     ptr = NULL;
+    
+    TRACE_1("dmmlib - malloc - request %zu bytes\n", size);
 
     /* Try to find a raw block available for allocation */
 
@@ -67,9 +71,16 @@ void * malloc(size_t size) {
         if(allocation_size < SYS_ALLOC_SIZE / 2) {
             allocation_size = SYS_ALLOC_SIZE;
         } else {
-            return (void *)create_new_raw_block(allocation_size, BIGBLOCK);
+            ptr = (void *)create_new_raw_block(allocation_size, BIGBLOCK);
+            if(ptr != NULL) {
+                TRACE_1("dmmlib - malloc - allocated a whole raw block of %zu"
+                        " bytes at %p\n", allocation_size, (void *)ptr);
+                ptr = (void *)((char *)ptr + sizeof(raw_block_header_t));
+            }
+            return ptr;
         }
 
+
         pthread_mutex_lock(&systemallocator.creation_mutex);
 #ifdef FL_RB_ONLY
         new_raw_block = create_new_raw_block(allocation_size, FREELIST);
@@ -112,6 +123,10 @@ void free(void *ptr) {
         dmmlib_free(current_raw_block, ptr);
     } else { // It has to be a BIGBLOCK, just munmap it
         release_memory(ptr);
+        current_raw_block = (raw_block_header_t *)((char *)ptr -
+                sizeof(raw_block_header_t));
+        TRACE_1("dmmlib - free - free'ing %zu bytes from raw block %p\n",
+                current_raw_block->size, (void *)current_raw_block);
     }
 }