Re: GWeakNotify fired earlier than expected
- From: IdaRub <idarub gmail com>
- To: hp pobox com
- Cc: gtk-devel-list gnome org, gtk-app-devel-list gnome org
- Subject: Re: GWeakNotify fired earlier than expected
- Date: Mon, 16 Mar 2009 18:03:47 +0100
On Mon, Mar 16, 2009 at 5:51 PM, Havoc Pennington
<havoc pennington gmail com> wrote:
> Hi,
>
> On Mon, Mar 16, 2009 at 12:45 PM, IdaRub <idarub gmail com> wrote:
>> After reading the gobject code a bit more, it seems that weak
>> references are fired on dispose, not finalize:
>>
>
> Right, that's correct.
>
>> All of the documentation I could find states that it happens during
>> finalization, but it seems it should all say that it happens during
>> dispose.
>
> Probably true. dispose is typically done during finalize, but can
> happen sooner also. dispose can happen multiple times.
>
>> In my example this detail is actually very important.
>> Doesn't look like there is a way to catch dispose without shimming the
>> instance handler. Any ideas?
>
> You mean there's no way to catch finalize?
>
> Finalize deliberately can't be intercepted, because it raises a lot of
> thorny issues about reentrancy; what if the object is used or its
> refcount increased during finalization?
It would be nice if you could intercept it, the author being
responsible for understanding what finalize means, and not doing
anything inappropriate. I was attempting to write some ownership
debugging code, basically something like leak and use-after-free
detection for a few specific object. We'll catch this other ways
though, so I suppose I will drop this idea.
Thanks for your great reply.
>
> So things are split into two phases, dispose() which you can get
> notifications about (and which can happen multiple times); and
> finalize which actually frees the object.
>
> Havoc
>
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]