diff --git a/libguile/ChangeLog b/libguile/ChangeLog index 262a3ab2c..fcc3b94a7 100644 --- a/libguile/ChangeLog +++ b/libguile/ChangeLog @@ -1,3 +1,9 @@ +2000-12-28 Michael Livshin + + * guardians.c (mark_dependencies_in_tconc): new function. + (mark_dependencies): bug fix. mark the dependencies of the known + zombies, too. duh. + 2000-12-24 Michael Livshin * gc.c: (scm_gc_mark_dependencies): use SCM_EQ_P for SCMs, not diff --git a/libguile/guardians.c b/libguile/guardians.c index 5a53a6222..130b3e1df 100644 --- a/libguile/guardians.c +++ b/libguile/guardians.c @@ -320,15 +320,15 @@ guardian_gc_init (void *dummy1, void *dummy2, void *dummy3) } static void -mark_dependencies (guardian_t *g) +mark_dependencies_in_tconc (tconc_t *tc) { SCM pair, next_pair; SCM *prev_ptr; - /* scan the live list for unmarked objects, and mark their + /* scan the list for unmarked objects, and mark their dependencies */ - for (pair = g->live.head, prev_ptr = &g->live.head; - ! SCM_EQ_P (pair, g->live.tail); + for (pair = tc->head, prev_ptr = &tc->head; + ! SCM_EQ_P (pair, tc->tail); pair = next_pair) { SCM obj = SCM_CAR (pair); @@ -363,6 +363,13 @@ mark_dependencies (guardian_t *g) } } +static void +mark_dependencies (guardian_t *g) +{ + mark_dependencies_in_tconc (&g->zombies); + mark_dependencies_in_tconc (&g->live); +} + static void mark_and_zombify (guardian_t *g) {