Hi guilers, If I 'guard' a value, and store it in a weak-key hashtable, then it doesn't appear in the guardian even after it is removed from the weak-hash by a garbage collection. Note, this only happens in a _script_, and will work fine in a REPL (you should only need two GCs, one for the weak hash, and one for the now free value). e.g.
(define guardian (make-guardian)) (define finalizer-table (make-weak-key-hash-table)) (let ((f (lambda () (display "test\n")))) (guardian f) (hashq-set! finalizer-table (cons #f #f) f) #f) (write finalizer-table) (newline) (gc)(gc)(gc)(gc)(gc)(gc)(gc)(gc)(gc)(gc)(gc)(gc) (write finalizer-table) (newline) (write (guardian)) (newline) will produce the output [ian@Kagami guile]$ guile -s /tmp/gcbug.scm #<weak−key−hash−table 1/31> #<weak−key−hash−table 0/31> #f [ian@Kagami guile]$ -- Ian Price "Programming is like pinball. The reward for doing it well is the opportunity to do it again" - from "The Wizardy Compiled"
