Subject: Re: bug#24321: Guardian fails to protect procedure properties

From: Andy Wingo <[email-masked]>
Date: Fri, 02 Sep 2016 10:10:53 +0200

On Sat 27 Aug 2016 21:32, Robin Templeton <[email-masked]> writes:

> The following expression produces possibly erroneous results in Guile
> 2.1.3.104-8f2f8 (with Debian's libgc1c2 version 1:7.4.2-8):
>
> (let ((guardian (make-guardian))
>       (foo (eval '(lambda () #f) (interaction-environment))))
>   (set-procedure-property! foo 'wibbly 'wobbly)
>   (guardian foo)
>   (format #t "~S~%" (procedure-properties foo))
>   (set! foo #f)
>   (gc)
>   (do ((foo (guardian) (guardian)))
>       ((not foo))
>     (format #t "~S~%" (procedure-properties foo))))
>
> First it prints "((wibbly . wobbly))" as expected, but after the
> procedure is retrieved from the guardian the list of properties is
> empty. The properties are stored in a weak hash table, but shouldn't
> they be protected from GC while the procedure is in the guardian?

Related to https://debbugs.gnu.org/cgi/bugreport.cgi?bug=10836.

Andy