summaryrefslogtreecommitdiff
path: root/libguile/foreign.c
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2012-01-23 23:51:33 +0100
committerLudovic Courtès <ludo@gnu.org>2012-01-23 23:51:33 +0100
commit5765c5a82ce3891faff02c0bcc603cc0fe5ae36d (patch)
treeffd79f59e8e979194ed126c181998e9cf3bbf6f5 /libguile/foreign.c
parentc64d07d822f44f5917ee9b90956bb8ed5bb716fd (diff)
downloadguile-5765c5a82ce3891faff02c0bcc603cc0fe5ae36d.tar.gz
FFI: Fix `set-pointer-finalizer!' to leave the type cell unchanged.
This is a followup to 690a0112e55823aa8b862daeddcf44cea97e7917 ("Remove the "has finalizer?" bit from pointer objects.") * libguile/foreign.c (scm_set_pointer_finalizer_x): Leave the type cell unchanged. Before, `equal?' would break on pointers on which `set-pointer-finalizer!' had been called. * test-suite/tests/foreign.test ("make-pointer")["equal? modulo finalizer (set-pointer-finalizer!)"]: New test.
Diffstat (limited to 'libguile/foreign.c')
-rw-r--r--libguile/foreign.c2
1 files changed, 0 insertions, 2 deletions
diff --git a/libguile/foreign.c b/libguile/foreign.c
index f8c268d51..0dc7ac666 100644
--- a/libguile/foreign.c
+++ b/libguile/foreign.c
@@ -319,8 +319,6 @@ SCM_DEFINE (scm_set_pointer_finalizer_x, "set-pointer-finalizer!", 2, 0, 0,
c_finalizer = SCM_POINTER_VALUE (finalizer);
- SCM_SET_CELL_WORD_0 (pointer, SCM_CELL_WORD_0 (pointer) | (1 << 16UL));
-
GC_REGISTER_FINALIZER_NO_ORDER (SCM2PTR (pointer),
pointer_finalizer_trampoline,
c_finalizer,