GNU bug report logs - #12095
Protecting pointer on bytevector with guardian does not protect memory

Previous Next

Package: guile;

Reported by: Patrick Bernaud <patrickb <at> chez.com>

Date: Mon, 30 Jul 2012 16:48:01 UTC

Severity: normal

Done: ludo <at> gnu.org (Ludovic Courtès)

Bug is archived. No further changes may be made.

Full log


View this message in rfc822 format

From: Daniel Hartwig <mandyke <at> gmail.com>
To: Ludovic Courtès <ludo <at> gnu.org>
Cc: Patrick Bernaud <patrickb <at> chez.com>, 12095 <at> debbugs.gnu.org, Ian Price <ianprice90 <at> googlemail.com>
Subject: bug#12095: Protecting pointer on bytevector with guardian does not protect memory
Date: Sun, 7 Oct 2012 10:56:55 +0800
On 7 October 2012 05:41, Ludovic Courtès <ludo <at> gnu.org> wrote:
> Hi,
>
> Daniel Hartwig <mandyke <at> 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




This bug report was last modified 12 years and 291 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.