From 2740540075104998da34414796c80d2362b83c8f Mon Sep 17 00:00:00 2001 From: Eli Barzilay Date: Sun, 31 Oct 2004 07:53:38 +0000 Subject: [PATCH] register-finalizer is done in Scheme now original commit: 9aada611f5f3a7d79b6e3a9d03e2d1fadd3f03b4 --- collects/mzlib/foreign.ss | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/collects/mzlib/foreign.ss b/collects/mzlib/foreign.ss index d7e56c8..e76210e 100644 --- a/collects/mzlib/foreign.ss +++ b/collects/mzlib/foreign.ss @@ -57,8 +57,7 @@ (provide* ctype-sizeof ctype-alignof malloc free end-stubborn-change cpointer? (unsafe ptr-ref) (unsafe ptr-set!) ptr-equal? - ctype? make-ctype make-cstruct-type register-finalizer - make-sized-byte-string) + ctype? make-ctype make-cstruct-type make-sized-byte-string) (provide* _void _int8 _uint8 _int16 _uint16 _int32 _uint32 _int64 _uint64 _byte _word _int _uint _fixint _ufixint _long _ulong _fixnum _ufixnum _float _double _double* @@ -1246,5 +1245,15 @@ regexp-replace regexp-replace*) (caar rs) str (cadar rs)) (cdr rs))))) +;; A facility for running finalizers using executors. #%foreign has a C-based +;; version that uses finalizers, but that leads to calling Scheme from the GC +;; which is not a good idea. +(define killer-executor (make-will-executor)) +(define killer-thread + (thread (lambda () (let loop () (will-execute killer-executor) (loop))))) +(provide (rename register-finalizer* register-finalizer)) +(define (register-finalizer* obj finalizer) + (will-register killer-executor obj finalizer)) + (define-unsafer unsafe!) )