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