Re: g_object_add_toggle_ref



Hi Stefan;

I very much doubt anybody here has knowledge of toggle reference and
language bindings.

You want gtk-devel-list gnome org, or you want to join the #gtk+ IRC
channel on irc.gnome.org.

As a note, though:

But when the user creates widgets and never add them to a container, there state
remains ref count 2 floating

All GC language bindings will immediately sink the floating reference,
as it makes memory management harder for them (it's a C feature, after
all). So my suggestion is to immediately and automatically sink the
floating reference inside your wrapper around g_object_new() before it
returns the instance to the non-C side.

Ciao,
 Emmanuele.

On 25 June 2017 at 10:38, Stefan Salewski <mail ssalewski de> wrote:
On Tue, 2017-06-06 at 14:33 +0200, Stefan Salewski wrote:
so after call of g_object_add_toggle_ref() ref_count is indeed 2, and
after call of g_object_unref() the toggleNotify() callback is
activated.

Some more investigations seems to indicate:

When I create a widget and apply g_object_add_toggle_ref(), then ref
count is increased to 2 and the widget is still floating, When I now
add that widget to a container, object is sunk, ref count stays at 2,
and the toggle ref callback in not yet called. But when I remove the
widget from the container again, ref count decreases to 1, and the
toggle ref callback is called. This is fine, as the callback can now
decrease refcount of the proxy object as well. Adding that widget to
the container again works also, callback is called...

But there is one drawback: In GC languages the user is generally free
to create a large number of object and just forget about them. But when
the user creates widgets and never add them to a container, there state
remains ref count 2 floating, and they are keep alive until program
terminates.

Well, we may say that the user should not do that, because it makes no
sense.

A possible fix would be to fake a conainer add/remove operation. I can
do that by a ref_sink/unref function call on the widget after call of
g_object_add_toggle_ref(). That results in a ref count of 1 and a not
floating object, which behaves fine futher. But I am not sure if I
should do that fake, maybe it again generates other problems.


_______________________________________________
gtk-list mailing list
gtk-list gnome org
https://mail.gnome.org/mailman/listinfo/gtk-list



-- 
https://www.bassi.io
[@] ebassi [@gmail.com]


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