Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
model-checker : memory free
[simgrid.git] / src / xbt / mmalloc / mm_diff.c
index 819b161..d1f021a 100644 (file)
@@ -145,6 +145,11 @@ static void heap_area_pair_free_voidp(void *d){
   heap_area_pair_free((heap_area_pair_t) * (void **) d);
 }
 
+static void heap_area_free(heap_area_t area){
+  xbt_free(area);
+  area = NULL;
+}
+
 /************************************************************************************/
 
 static heap_area_t new_heap_area(int block, int fragment){
@@ -244,15 +249,15 @@ static void match_equals(xbt_dynar_t list){
       
       if(heapinfo1[current_pair->block1].busy_frag.equal_to[current_pair->fragment1] != NULL){    
         previous_area = heapinfo1[current_pair->block1].busy_frag.equal_to[current_pair->fragment1];
-        xbt_free(heapinfo2[previous_area->block].busy_frag.equal_to[previous_area->fragment]);
+        heap_area_free(heapinfo2[previous_area->block].busy_frag.equal_to[previous_area->fragment]);
         heapinfo2[previous_area->block].busy_frag.equal_to[previous_area->fragment] = NULL;
-        xbt_free(previous_area); 
+        heap_area_free(previous_area); 
       }
       if(heapinfo2[current_pair->block2].busy_frag.equal_to[current_pair->fragment2] != NULL){        
         previous_area = heapinfo2[current_pair->block2].busy_frag.equal_to[current_pair->fragment2];
-        xbt_free(heapinfo1[previous_area->block].busy_frag.equal_to[previous_area->fragment]);
+        heap_area_free(heapinfo1[previous_area->block].busy_frag.equal_to[previous_area->fragment]);
         heapinfo1[previous_area->block].busy_frag.equal_to[previous_area->fragment] = NULL;
-        xbt_free(previous_area);
+        heap_area_free(previous_area);
       }
 
       heapinfo1[current_pair->block1].busy_frag.equal_to[current_pair->fragment1] = new_heap_area(current_pair->block2, current_pair->fragment2);
@@ -262,15 +267,15 @@ static void match_equals(xbt_dynar_t list){
 
       if(heapinfo1[current_pair->block1].busy_block.equal_to != NULL){
         previous_area = heapinfo1[current_pair->block1].busy_block.equal_to;
-        xbt_free(heapinfo2[previous_area->block].busy_block.equal_to);
-        heapinfo2[previous_area->block].busy_block.equal_to = NULL; 
-        xbt_free(previous_area);
+        heap_area_free(heapinfo2[previous_area->block].busy_block.equal_to);
+        heapinfo2[previous_area->block].busy_block.equal_to = NULL;
+        heap_area_free(previous_area);
       }
       if(heapinfo2[current_pair->block2].busy_block.equal_to != NULL){
         previous_area = heapinfo2[current_pair->block2].busy_block.equal_to;
-        xbt_free(heapinfo1[previous_area->block].busy_block.equal_to);
+        heap_area_free(heapinfo1[previous_area->block].busy_block.equal_to);
         heapinfo1[previous_area->block].busy_block.equal_to = NULL;
-        xbt_free(previous_area);
+        heap_area_free(previous_area);
       }
 
       heapinfo1[current_pair->block1].busy_block.equal_to = new_heap_area(current_pair->block2, current_pair->fragment2);
@@ -320,16 +325,16 @@ void init_heap_information(xbt_mheap_t heap1, xbt_mheap_t heap2, xbt_dynar_t i1,
   to_ignore2 = i2;
 
   if(MC_is_active()){
-    MC_ignore_global_variable("heaplimit", 1);
-    MC_ignore_global_variable("s_heap", 1);
-    MC_ignore_global_variable("heapbase1", 1);
-    MC_ignore_global_variable("heapbase2", 1);
-    MC_ignore_global_variable("heapinfo1", 1);
-    MC_ignore_global_variable("heapinfo2", 1);
-    MC_ignore_global_variable("heapsize1", 1);
-    MC_ignore_global_variable("heapsize2", 1);
-    MC_ignore_global_variable("to_ignore1", 1);
-    MC_ignore_global_variable("to_ignore2", 1);
+    MC_ignore_global_variable("heaplimit");
+    MC_ignore_global_variable("s_heap");
+    MC_ignore_global_variable("heapbase1");
+    MC_ignore_global_variable("heapbase2");
+    MC_ignore_global_variable("heapinfo1");
+    MC_ignore_global_variable("heapinfo2");
+    MC_ignore_global_variable("heapsize1");
+    MC_ignore_global_variable("heapsize2");
+    MC_ignore_global_variable("to_ignore1");
+    MC_ignore_global_variable("to_ignore2");
   }
 
 }
@@ -340,12 +345,12 @@ void reset_heap_information(){
 
   while(i<=heaplimit){
     if(heapinfo1[i].type == 0){
-      xbt_free(heapinfo1[i].busy_block.equal_to);
+      heap_area_free(heapinfo1[i].busy_block.equal_to);
       heapinfo1[i].busy_block.equal_to = NULL;
     }
     if(heapinfo1[i].type > 0){
       for(j=0; j < (size_t) (BLOCKSIZE >> heapinfo1[i].type); j++){
-        xbt_free(heapinfo1[i].busy_frag.equal_to[j]);
+        heap_area_free(heapinfo1[i].busy_frag.equal_to[j]);
         heapinfo1[i].busy_frag.equal_to[j] = NULL;
       }
     }
@@ -356,12 +361,12 @@ void reset_heap_information(){
 
   while(i<=heaplimit){
     if(heapinfo2[i].type == 0){
-      xbt_free(heapinfo2[i].busy_block.equal_to);
+      heap_area_free(heapinfo2[i].busy_block.equal_to);
       heapinfo2[i].busy_block.equal_to = NULL;
     }
     if(heapinfo2[i].type > 0){
       for(j=0; j < (size_t) (BLOCKSIZE >> heapinfo2[i].type); j++){
-        xbt_free(heapinfo2[i].busy_frag.equal_to[j]);
+        heap_area_free(heapinfo2[i].busy_frag.equal_to[j]);
         heapinfo2[i].busy_frag.equal_to[j] = NULL;
       }
     }
@@ -572,7 +577,7 @@ int mmalloc_compare_heap(xbt_mheap_t heap1, xbt_mheap_t heap2){
         }
 
         if(heapinfo1[i1].busy_frag.equal_to[j1] == NULL){
-          fprintf(stderr,"Block %zu, fragment %zu not found (size_used = %zd, address = %p, ignore %d)\n", i1, j1, heapinfo1[i1].busy_frag.frag_size[j1], addr_frag1, heapinfo1[i1].busy_frag.ignore[j1]);
+          XBT_DEBUG("Block %zu, fragment %zu not found (size_used = %zd, address = %p, ignore %d)\n", i1, j1, heapinfo1[i1].busy_frag.frag_size[j1], addr_frag1, heapinfo1[i1].busy_frag.ignore[j1]);
           i2 = heaplimit + 1;
           i1 = heaplimit + 1;
           nb_diff1++;