瀏覽代碼

fix memory_hook placement

David Rose 18 年之前
父節點
當前提交
adf6c06b0f
共有 1 個文件被更改,包括 5 次插入4 次删除
  1. 5 4
      dtool/src/dtoolbase/ptmalloc2_smp_src.cxx

+ 5 - 4
dtool/src/dtoolbase/ptmalloc2_smp_src.cxx

@@ -3492,14 +3492,13 @@ grow_heap(h, diff) heap_info *h; long diff;
 
   if(diff >= 0) {
     diff = (diff + page_mask) & ~page_mask;
-    memory_hook->inc_heap(diff);
     new_size = (long)h->size + diff;
     if(new_size > HEAP_MAX_SIZE)
       return -1;
     if(mprotect((char *)h + h->size, diff, PROT_READ|PROT_WRITE) != 0)
       return -2;
+    memory_hook->inc_heap(diff);
   } else {
-    memory_hook->dec_heap(-diff);
     new_size = (long)h->size + diff;
     if(new_size < (long)sizeof(*h))
       return -1;
@@ -3509,6 +3508,7 @@ grow_heap(h, diff) heap_info *h; long diff;
                     MAP_PRIVATE|MAP_FIXED) == (char *) MAP_FAILED)
       return -2;
     /*fprintf(stderr, "shrink %p %08lx\n", h, new_size);*/
+    memory_hook->dec_heap(-diff);
   }
   h->size = new_size;
   return 0;
@@ -3517,8 +3517,8 @@ grow_heap(h, diff) heap_info *h; long diff;
 /* Delete a heap. */
 
 #define delete_heap(heap) { \
-  munmap((char*)(heap), HEAP_MAX_SIZE); \
   memory_hook->dec_heap(heap->size); \
+  munmap((char*)(heap), HEAP_MAX_SIZE); \
 }
 
 static int
@@ -4806,6 +4806,7 @@ static Void_t* sYSMALLOc(nb, av) INTERNAL_SIZE_T nb; mstate av;
           mp_.max_total_mem = sum;
 #endif
 
+        memory_hook->inc_heap(size);
         check_chunk(av, p);
 
         return chunk2mem(p);
@@ -5292,8 +5293,8 @@ munmap_chunk(p) mchunkptr p;
   mp_.n_mmaps--;
   mp_.mmapped_mem -= (size + p->prev_size);
 
-  ret = munmap((char *)p - p->prev_size, size + p->prev_size);
   memory_hook->dec_heap(size + p->prev_size);
+  ret = munmap((char *)p - p->prev_size, size + p->prev_size);
 
   /* munmap returns non-zero on failure */
   assert(ret == 0);