Tim Janik wrote:
> On Thu, 17 Jan 2008, Alexander Larsson wrote:
>
>   
>> On Wed, 2008-01-16 at 15:03 +0000, [EMAIL PROTECTED] wrote:
>>     
>>> I noticed the weakref introduction says that notifies can be called many 
>>> times:
>>>
>>> http://library.gnome.org/devel/gobject/unstable/gobject-memory.html#gobject-memory-weakref
>>>
>>>    ... which is invoked when the object runs its dispose method. As such,
>>>    each weak ref can be invoked more than once upon object finalization
>>>    (since dispose can run more than once during object finalization).
>>>
>>> I'm not sure this is right: looking at the source for gobject it seems
>>> that the notifies are a fire-once thing, and are removed upon firing.
>>>
>>> Should I open a docs bug on this? (or am I confused?)
>>>       
>
> you mis the facts that new weak refs can be added at any point in time,
> such as after dispose, in finalize or even during weakref notifies.
> (that's actually the semantics of GObject's GData mechanism which
> is used to implement weakrefs)
>
>   
>> I actually have a related question. I remember that weak refs weren't
>> allowed to ressurect the object. However, with the weak ref callbacks
>> running from dispose, and dispose being allowed to ressurect the object,
>> why can't weak refs ressurect?
>>     
>
> because weakrefs will also run during finalization, and an object
> can not be resurrected from finalization.
>
>   
>> Maybe weak ref callbacks should be moved to finalization?
>>     
>
> conceptually yes. regarding backwards compatibility, no.
>   

Then there is another docs bug, g_object_weak_ref()
docs say:

A GWeakNotify <cid:part1.03020602.08010607@tamu.edu> function can be 
added to an object as a
callback that gets triggered when the object is finalized.
Since the object is already being finalized when the
GWeakNotify <cid:part1.03020602.08010607@tamu.edu> is called, there's 
not much you could do with
the object, apart from e.g. using its adress as hash-index or the like.

I have never seen the docs quoted in the original mail,
and what docs say about g_object_weak_ref() implies
that weak ref callback is called 1) exactly once; 2) after
the object is finalized (and so I got some code which
supposes that the callback is called exactly once). So
what is the truth? Possibly more than once, and before
finalize()?

Best regards,
Yevgen

_______________________________________________
gtk-devel-list mailing list
gtk-devel-list@gnome.org
http://mail.gnome.org/mailman/listinfo/gtk-devel-list

Reply via email to