Fix gc bug

This commit is contained in:
2026-04-17 01:15:27 -07:00
parent d21a5726e0
commit 891e5359bf

View File

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