Re: g_object_add_toggle_ref



On Sat, 2017-06-03 at 15:37 +0200, Stefan Salewski wrote:

What is a bit strange is

void
g_object_add_toggle_ref (GObject       *object,
                         GToggleNotify  notify,
                         gpointer       data)
{
  ToggleRefStack *tstack;
  guint i;
  
  g_return_if_fail (G_IS_OBJECT (object));
  g_return_if_fail (notify != NULL);
  g_return_if_fail (object->ref_count >= 1);

  g_object_ref (object);

So after a call of g_object_add_toggle_ref() ref_count of an object is
always greater or equal to two? But how can now that value drop ever
again below 2? When a new references is added, it increases, and when
that references is removed, the value is decreased. But never below 2
this way? It is a bit confusing indeed.

More confusing is, that g_object_ref_sink () seems to exist since
gobject release 2.10, while g_object_add_toggle_ref () seems to exists
already since 2.8.

And, for my understanding of English wording, the documentation of 
g_object_ref_sink() contradicts even itself:

https://developer.gnome.org/gobject/stable/gobject-The-Base-Object-Type
.html#g-object-ref-sink


"Increase the reference count of object
, and possibly remove the
floating reference, if object
 has a floating reference.

In other words, if the object is floating, then this call "assumes
ownership" of the floating reference, converting it to a normal
reference by clearing the floating flag while leaving the reference
count unchanged.  If the object is not floating, then this call
adds a new normal reference increasing the reference count by one."

I assume, that the second part is correct. Maybe the first sentence
should be something like "Increase the reference count of object
, OR possibly"

So it will be not that easy to get fully working Garbage Collector
support.



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