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) {
|
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));
|
assert(!OBJECT_HAS_LOCAL_REFERENCE_P(val));
|
||||||
switch (((LispObject *) val)->type) {
|
switch (((LispObject *) val)->type) {
|
||||||
case TYPE_HASH_TABLE: {
|
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) {
|
static void gc_sweep_objects(size_t *restrict limit) {
|
||||||
while (white_objects && saturating_dec(limit, 1)) {
|
while (white_objects && saturating_dec(limit, 1)) {
|
||||||
|
assert(OBJECT_GC_SET_P(white_objects->obj, GC_WHITE));
|
||||||
free_object(white_objects->obj);
|
free_object(white_objects->obj);
|
||||||
}
|
}
|
||||||
// reset the gc
|
// reset the gc
|
||||||
|
|||||||
Reference in New Issue
Block a user