bug-guile
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

bug#9900: Using a guardian on a value in a weak hash


From: Stefan Israelsson Tampe
Subject: bug#9900: Using a guardian on a value in a weak hash
Date: Sat, 29 Oct 2011 19:42:13 +0200

f below in the code is referencing a direct function and not a closure that is not gc:able it seams
although there is no references to it. It looks like the loaded file references that code and it will not be
gc:ed until the same file is loaded again (make sure to save the old guardian so that one can inspect)
The weak key hastable is wrongly used and swaping key and value gives correct behavior

Regards
Stefan

On Fri, Oct 28, 2011 at 10:42 PM, Ian Price <address@hidden> wrote:

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


address@hidden guile]$ guile -s /tmp/gcbug.scm
#<weak−key−hash−table 1/31>
#<weak−key−hash−table 0/31>
#f
address@hidden guile]$

--
Ian Price

"Programming is like pinball. The reward for doing it well is
the opportunity to do it again" - from "The Wizardy Compiled"






reply via email to

[Prev in Thread] Current Thread [Next in Thread]