Properly find last page of huge heap

This commit is contained in:
Justin Ethier 2016-07-07 03:09:36 -04:00
parent aac1c44b3d
commit fe27aff148

6
gc.c
View file

@ -429,16 +429,18 @@ char *gc_copy_obj(object dest, char *obj, gc_thread_data * thd)
int gc_grow_heap(gc_heap * h, int heap_type, size_t size, size_t chunk_size) int gc_grow_heap(gc_heap * h, int heap_type, size_t size, size_t chunk_size)
{ {
size_t cur_size, new_size; size_t cur_size, new_size;
gc_heap *h_last, *h_new; gc_heap *h_last = h, *h_new;
pthread_mutex_lock(&heap_lock); pthread_mutex_lock(&heap_lock);
// Compute size of new heap page // Compute size of new heap page
if (heap_type == HEAP_HUGE) { if (heap_type == HEAP_HUGE) {
new_size = gc_heap_align(size); new_size = gc_heap_align(size);
while (h_last->next) {
h_last = h_last->next;
}
} else { } else {
// Grow heap gradually using fibonnaci sequence. // Grow heap gradually using fibonnaci sequence.
size_t prev_size = GROW_HEAP_BY_SIZE; size_t prev_size = GROW_HEAP_BY_SIZE;
new_size = 0; new_size = 0;
h_last = h;
while (h_last->next) { while (h_last->next) {
if (new_size < HEAP_SIZE) { if (new_size < HEAP_SIZE) {
new_size = prev_size + h_last->size; new_size = prev_size + h_last->size;