diff options
author | Michael Livshin <mlivshin@bigfoot.com> | 2000-12-28 14:26:12 +0000 |
---|---|---|
committer | Michael Livshin <mlivshin@bigfoot.com> | 2000-12-28 14:26:12 +0000 |
commit | c275ccf59e31d76edf35385e62d6b82c0da2543d (patch) | |
tree | 3e3110df247b5e270b8a2dd4045b2d00f769e891 /libguile | |
parent | 0209177b7762f923d0cc56e9cf710f267263d259 (diff) | |
download | guile-c275ccf59e31d76edf35385e62d6b82c0da2543d.tar.gz |
* guardians.c (mark_dependencies_in_tconc): new function.
(mark_dependencies): bug fix. mark the dependencies of the known
zombies, too. duh.
Diffstat (limited to 'libguile')
-rw-r--r-- | libguile/ChangeLog | 6 | ||||
-rw-r--r-- | libguile/guardians.c | 15 |
2 files changed, 17 insertions, 4 deletions
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 <mlivshin@bigfoot.com> + + * 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 <mlivshin@bigfoot.com> * 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); @@ -364,6 +364,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) { SCM tconc_tail = g->live.tail; |