diff options
author | Ludovic Courtes <ludovic.courtes@laas.fr> | 2006-05-26 13:50:21 +0000 |
---|---|---|
committer | Ludovic Courtès <ludo@gnu.org> | 2008-09-05 09:34:35 +0200 |
commit | 10fb3386dd186244becc493d83c291b9bec2075e (patch) | |
tree | 3c959fe2d9170e4e05810de4f71930a1d16c6b51 /libguile/smob.c | |
parent | a4a141f679fa66b1538148aae8046a9f351b3216 (diff) | |
download | guile-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.c | 13 |
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; } |