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