fix memory_hook placement

This commit is contained in:
David Rose 2007-07-13 17:23:54 +00:00
parent 391f297dc6
commit adf6c06b0f
1 changed files with 5 additions and 4 deletions

View File

@ -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);