[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: ‘set-cdr!’ and weak-cdr pairs
From: |
Ludovic Courtès |
Subject: |
Re: ‘set-cdr!’ and weak-cdr pairs |
Date: |
Sun, 27 Mar 2011 15:29:54 +0200 |
User-agent: |
Gnus/5.110013 (No Gnus v0.13) Emacs/23.3 (gnu/linux) |
Hello!
Andy Wingo <address@hidden> writes:
> On Sun 13 Mar 2011 16:25, address@hidden (Ludovic Courtès) writes:
>
>> The problem is that ‘hash-create-handle!’ above created a weak-cdr
>> pair—i.e., a pair whose cdr is /not/ scanned for pointers—but ‘set-cdr!’
>> did not register a disappearing link from O to K+V. Consequently, O
>> eventually gets collected, but K+V remains; the storage of O then gets
>> reused, and the cdr of K+V ends up containing either an unrelated or >an
>> invalid Scheme object.
>
> Given that we don't expose weak-pair constructors or accessors to
> Scheme, we should not expose weak pairs to Scheme. What do you think
> about making it an error to hash-create-handle! on a weak table? That
> way you never expose a weak pair to Scheme. It does appear possible to
> discriminate in C between calls to create-handle! that occur due to ref
> / set! and those that are called explicitly.
Yes, sounds good. Would you like to work on it? :-)
Thanks,
Ludo’.