diff --git a/src/gc.c b/src/gc.c index 190c663..448b6f2 100644 --- a/src/gc.c +++ b/src/gc.c @@ -151,7 +151,8 @@ void gc_mark_stack_for_rescan(void) { } static void free_object(LispVal *val) { - assert(OBJECT_GC_SET_P(val, GC_WHITE)); + // This is called on non-white objects during cleanup! Don't assert + // OBJECT_GC_SET_P! assert(!OBJECT_HAS_LOCAL_REFERENCE_P(val)); switch (((LispObject *) val)->type) { case TYPE_HASH_TABLE: { @@ -349,6 +350,7 @@ static void maybe_free_some_object_list_nodes(void) { static void gc_sweep_objects(size_t *restrict limit) { while (white_objects && saturating_dec(limit, 1)) { + assert(OBJECT_GC_SET_P(white_objects->obj, GC_WHITE)); free_object(white_objects->obj); } // reset the gc