瀏覽代碼

bitmap: use locks in malloc() and free() before updating global stats

Ioannis Koutras 12 年之前
父節點
當前提交
e88386d0e1
共有 3 個文件被更改,包括 14 次插入6 次删除
  1. 7 4
      src/bitmap/bitmap_free.c
  2. 3 0
      src/bitmap/bitmap_malloc.c
  3. 4 2
      src/free.c

+ 7 - 4
src/bitmap/bitmap_free.c

@@ -29,6 +29,7 @@
 #include "trace.h"
 
 #ifdef WITH_ALLOCATOR_STATS
+#include "locks.h"
 #include "statistics.h"
 #include "dmmlib/dmmlib.h"
 #endif /* WITH_ALLOCATOR_STATS */
@@ -72,12 +73,14 @@ void bitmap_free(bitmap_rb_t *raw_block, void *ptr) {
     }
 
 #ifdef WITH_ALLOCATOR_STATS
-            update_stats(&systemallocator.dmm_stats,
-                    FREE,
+    lock_global();
+    update_stats(&systemallocator.dmm_stats,
+            FREE,
 #ifdef REQUEST_SIZE_INFO
-                    chunk_header->requested_size,
+            chunk_header->requested_size,
 #endif /* REQUEST_SIZE_INFO */
-                    cells_used * raw_block->bytes_per_cell);
+            cells_used * raw_block->bytes_per_cell);
+    unlock_global();
 #endif /* WITH_ALLOCATOR_STATS */
 
 }

+ 3 - 0
src/bitmap/bitmap_malloc.c

@@ -29,6 +29,7 @@
 #include "trace.h"
 
 #ifdef WITH_ALLOCATOR_STATS
+#include "locks.h"
 #include "statistics.h"
 #include "dmmlib/dmmlib.h"
 #endif /* WITH_ALLOCATOR_STATS */
@@ -124,12 +125,14 @@ void * bitmap_malloc(bitmap_rb_t *raw_block, size_t req_size) {
 
             // 5. Statistics support
 #ifdef WITH_ALLOCATOR_STATS
+            lock_global();
             update_stats(&systemallocator.dmm_stats,
                     MALLOC,
 #ifdef REQUEST_SIZE_INFO
                     req_size - CHUNK_HDR_SIZE,
 #endif /* REQUEST_SIZE_INFO */
                     cells * raw_block->bytes_per_cell);
+            unlock_global();
 #endif /* WITH_ALLOCATOR_STATS */
 
             break;

+ 4 - 2
src/free.c

@@ -69,8 +69,10 @@ void free(void *ptr) {
             ((uintptr_t) ptr - sizeof(raw_block_header_t));
 
 #ifdef WITH_DEBUG
+        lock_global();
         SLIST_REMOVE(&systemallocator.bb_head, owner_raw_block,
                 raw_block_header_s, pointers);
+        unlock_global();
 #endif /* WITH_DEBUG */
 
 #ifdef WITH_ALLOCATOR_STATS
@@ -81,9 +83,9 @@ void free(void *ptr) {
                 owner_raw_block->requested_size,
 #endif /* REQUEST_SIZE_INFO */
                 owner_raw_block->size);
-#endif /* WITH_ALLOCATOR_STATS */
         unlock_global();
+#endif /* WITH_ALLOCATOR_STATS */
 
-        release_memory(owner_raw_block);
+        /* release_memory(owner_raw_block); */
     }
 }