diff options
author | Mikael Djurfeldt <djurfeldt@nada.kth.se> | 2003-02-24 10:46:29 +0000 |
---|---|---|
committer | Mikael Djurfeldt <djurfeldt@nada.kth.se> | 2003-02-24 10:46:29 +0000 |
commit | ea5c9285308f9aa0adedc0a9c75bf64abb4bf673 (patch) | |
tree | addef326c002c787dd6f2d62cd65a22cc92797fc /libguile/struct.c | |
parent | 9358af6a3e923679c2dbb99ac058e6cb0a90fe92 (diff) | |
download | guile-ea5c9285308f9aa0adedc0a9c75bf64abb4bf673.tar.gz |
* struct.c (scm_struct_gc_init): Removed.
(scm_struct_prehistory): Init scm_i_structs_to_free to SCM_EOL.
(This fixes a serious GC bug, introduced during the latest
reorganization of the GC, preventing freeing of structs and GOOPS
objects.)
Diffstat (limited to 'libguile/struct.c')
-rw-r--r-- | libguile/struct.c | 12 |
1 files changed, 2 insertions, 10 deletions
diff --git a/libguile/struct.c b/libguile/struct.c index c4f810260..d43872e47 100644 --- a/libguile/struct.c +++ b/libguile/struct.c @@ -356,15 +356,6 @@ scm_struct_free_entity (scm_t_bits * vtable SCM_UNUSED, scm_t_bits * data) } static void * -scm_struct_gc_init (void *dummy1 SCM_UNUSED, - void *dummy2 SCM_UNUSED, - void *dummy3 SCM_UNUSED) -{ - scm_i_structs_to_free = SCM_EOL; - return 0; -} - -static void * scm_free_structs (void *dummy1 SCM_UNUSED, void *dummy2 SCM_UNUSED, void *dummy3 SCM_UNUSED) @@ -408,6 +399,7 @@ scm_free_structs (void *dummy1 SCM_UNUSED, } } while (!SCM_NULLP (newchain)); + scm_i_structs_to_free = SCM_EOL; return 0; } @@ -804,7 +796,7 @@ scm_print_struct (SCM exp, SCM port, scm_print_state *pstate) void scm_struct_prehistory () { - scm_c_hook_add (&scm_before_mark_c_hook, scm_struct_gc_init, 0, 0); + scm_i_structs_to_free = SCM_EOL; scm_c_hook_add (&scm_after_sweep_c_hook, scm_free_structs, 0, 0); } |