summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--gc.c11
1 files changed, 6 insertions, 5 deletions
diff --git a/gc.c b/gc.c
index a06e7d57..ab7eb7f8 100644
--- a/gc.c
+++ b/gc.c
@@ -130,6 +130,9 @@ static void more(void)
heap_t *heap = coerce(heap_t *, chk_malloc_gc_more(sizeof *heap));
obj_t *block = heap->block, *end = heap->block + HEAP_SIZE;
+ if (free_list == 0)
+ free_tail = &heap->block[0].t.next;
+
if (end > heap_max_bound)
heap_max_bound = end;
@@ -142,8 +145,6 @@ static void more(void)
free_list = block++;
}
- free_tail = &heap->block[0].t.next;
-
heap->next = heap_list;
heap_list = heap;
@@ -183,6 +184,9 @@ val make_obj(void)
VALGRIND_MAKE_MEM_DEFINED(free_list, sizeof *free_list);
#endif
free_list = free_list->t.next;
+
+ if (free_list == 0)
+ free_tail = &free_list;
#if HAVE_VALGRIND
if (opt_vg_debug)
VALGRIND_MAKE_MEM_UNDEFINED(ret, sizeof *ret);
@@ -542,9 +546,6 @@ static int_ptr_t sweep(void)
const int vg_dbg = opt_vg_debug;
#endif
- if (free_list == 0)
- free_tail = &free_list;
-
#if CONFIG_GEN_GC
if (!full_gc) {
int i;