diff --git a/dtool/src/dtoolbase/ptmalloc2_smp_src.cxx b/dtool/src/dtoolbase/ptmalloc2_smp_src.cxx index cb4f14969e..649c9e8bae 100644 --- a/dtool/src/dtoolbase/ptmalloc2_smp_src.cxx +++ b/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);