summaryrefslogtreecommitdiff
path: root/libguile/smob.c
diff options
context:
space:
mode:
authorLudovic Courtes <ludovic.courtes@laas.fr>2006-05-26 13:50:21 +0000
committerLudovic Courtès <ludo@gnu.org>2008-09-05 09:34:35 +0200
commit10fb3386dd186244becc493d83c291b9bec2075e (patch)
tree3c959fe2d9170e4e05810de4f71930a1d16c6b51 /libguile/smob.c
parenta4a141f679fa66b1538148aae8046a9f351b3216 (diff)
downloadguile-10fb3386dd186244becc493d83c291b9bec2075e.tar.gz
Fixed use of finalizers for guardians and SMOBs (undoes patches 23-24).
* libguile/gc.c (finalizer_trampoline): Removed. (scm_gc_register_finalizer): Removed (undoes patches 23 and 24). * libguile/gc.h (scm_gc_register_finalizer): Removed. * libguile/guardians.c (finalize_guarded): Undid patch 23. Added support for "proxied finalizers". (scm_i_guard): Likewise. * libguile/smob.c (scm_i_finalize_smob): Adapted to `GC_finalization_proc'. * libguile/smob.h: Include <gc/gc.h>. (SCM_NEWSMOB): Use `GC_REGISTER_FINALIZER_NO_ORDER' instead of `scm_gc_register_finalizer ()'. (SCM_NEWSMOB3): Likewise. (scm_i_finalize_smob): Updated. git-archimport-id: lcourtes@laas.fr--2005-libre/guile-core--boehm-gc--1.9--patch-29
Diffstat (limited to 'libguile/smob.c')
-rw-r--r--libguile/smob.c13
1 files changed, 9 insertions, 4 deletions
diff --git a/libguile/smob.c b/libguile/smob.c
index bdeae2d93..de64d7f31 100644
--- a/libguile/smob.c
+++ b/libguile/smob.c
@@ -604,16 +604,21 @@ scm_i_new_smob_with_mark_proc (scm_t_bits tc, scm_t_bits data1,
/* Finalize SMOB by calling its SMOB type's free function, if any. */
-SCM
-scm_i_finalize_smob (SCM smob, SCM data)
+void
+scm_i_finalize_smob (GC_PTR ptr, GC_PTR data)
{
+ SCM smob;
size_t (* free_smob) (SCM);
+ smob = PTR2SCM (ptr);
+#if 0
+ printf ("finalizing SMOB %p (smobnum: %u)\n",
+ ptr, SCM_SMOBNUM (smob));
+#endif
+
free_smob = scm_smobs[SCM_SMOBNUM (smob)].free;
if (free_smob)
free_smob (smob);
-
- return SCM_UNSPECIFIED;
}