bug-guile
[Top][All Lists]
Advanced

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

bug#12095: Protecting pointer on bytevector with guardian does not prote


From: Ludovic Courtès
Subject: bug#12095: Protecting pointer on bytevector with guardian does not protect memory
Date: Sun, 07 Oct 2012 22:38:33 +0200
User-agent: Gnus/5.130005 (Ma Gnus v0.5) Emacs/24.2 (gnu/linux)

Hi,

Daniel Hartwig <address@hidden> skribis:

> On 7 October 2012 05:41, Ludovic Courtès <address@hidden> wrote:
>> Hi,
>>
>> Daniel Hartwig <address@hidden> 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.

There’s a weak reference from the pointer object to the bytevector.

Once that pointer object has been collected (as in the example above),
the bytevector can be collected anytime.

Thanks,
Ludo’.





reply via email to

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