On 7 October 2012 05:41, Ludovic Courtès <l...@gnu.org> wrote:
> Hi,
>
> Daniel Hartwig <mand...@gmail.com> skribis:
>
>> (define x (bytevector->pointer (make-bytevector len 1)))
>> (define a (pointer-address x))
>> (display x)(newline)
>> (my-guardian x)
>> ;(my-guardian (pointer->bytevector x len))
>> (set! x #f)
>>
>> (define (dump-struct)
>>   (write (pointer->bytevector (make-pointer a) len))(newline))
>
> This is expected to fail: ‘bytevector->pointer’ creates a weak reference
> from the returned pointer object to the given bytevector.  So when the
> pointer object is reclaimed, the bytevector can be reclaimed too, hence
> the problem you’re observing.  (And no, guardians don’t protect objects
> from garbage collection.)

If I understand correctly, there is never any non-weak reference to
the bv above and so it can be collected at any time.

It's a bit of an “of course!” moment to realise that the pointer is
only a weak reference.

Thanks



Reply via email to