From ea5c9285308f9aa0adedc0a9c75bf64abb4bf673 Mon Sep 17 00:00:00 2001 From: Mikael Djurfeldt Date: Mon, 24 Feb 2003 10:46:29 +0000 Subject: * 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.) --- libguile/struct.c | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) (limited to 'libguile/struct.c') diff --git a/libguile/struct.c b/libguile/struct.c index c4f810260..d43872e47 100644 --- a/libguile/struct.c +++ b/libguile/struct.c @@ -355,15 +355,6 @@ scm_struct_free_entity (scm_t_bits * vtable SCM_UNUSED, scm_t_bits * data) scm_gc_free ((void *) data[scm_struct_i_ptr], n, "entity struct"); } -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, @@ -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); } -- cgit v1.2.3