Fix gc bug
This commit is contained in:
4
src/gc.c
4
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
|
||||
|
||||
Reference in New Issue
Block a user