summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMikael Djurfeldt <djurfeldt@nada.kth.se>2000-04-21 23:12:09 +0000
committerMikael Djurfeldt <djurfeldt@nada.kth.se>2000-04-21 23:12:09 +0000
commit5d2565a7e7b6d21315505cb4597f5bd7a1f5a0b7 (patch)
tree99a8452e03806ca9d16e33e577c27a3bb5bd75f3
parent9b3e180c0d34ad6c833ac218e46c4ad16a0656bf (diff)
downloadguile-5d2565a7e7b6d21315505cb4597f5bd7a1f5a0b7.tar.gz
* guardians.c (scm_guardian_gc_init): Turned into a hook function
and added to scm_before_mark_c_hook. (scm_guardian_zombify): Turned into a hook function and added to scm_before_sweep_c_hook.
-rw-r--r--libguile/guardians.c13
1 files changed, 10 insertions, 3 deletions
diff --git a/libguile/guardians.c b/libguile/guardians.c
index ceae65136..94c3072a0 100644
--- a/libguile/guardians.c
+++ b/libguile/guardians.c
@@ -206,11 +206,13 @@ static guardian_t **current_link_field = NULL;
/* called before gc mark phase begins to initialise the live guardian
list. */
-void
-scm_guardian_gc_init()
+static void *
+scm_guardian_gc_init (void *dummy1, void *dummy2, void *dummy3)
{
current_link_field = &first_live_guardian;
first_live_guardian = NULL;
+
+ return 0;
}
/* mark a guardian by adding it to the live guardian list. */
@@ -230,7 +232,8 @@ g_mark (SCM ptr)
/* this is called by the garbage collector between the mark and sweep
phases. for each marked guardian, it moves any unmarked object in
its live list (tconc) to its zombie list (tconc). */
-void scm_guardian_zombify (void)
+static void *
+scm_guardian_zombify (void *dummy1, void *dummy2, void *dummy3)
{
guardian_t *first_guardian;
guardian_t **link_field = &first_live_guardian;
@@ -304,6 +307,8 @@ void scm_guardian_zombify (void)
scm_gc_mark (g->zombies.head);
} while (current_link_field != link_field);
+
+ return 0;
}
/* not generally used, since guardian smob is wrapped in a closure.
@@ -326,6 +331,8 @@ scm_init_guardian()
scm_tc16_guardian = scm_make_smob_type_mfpe ("guardian", sizeof (guardian_t),
g_mark, NULL, g_print, NULL);
guard1 = scm_make_subr_opt ("guardian", scm_tc7_subr_2o, guard, 0);
+ scm_c_hook_add (&scm_before_mark_c_hook, scm_guardian_gc_init, 0, 0);
+ scm_c_hook_add (&scm_before_sweep_c_hook, scm_guardian_zombify, 0, 0);
#include "libguile/guardians.x"
}