Just like g_object_notify, check for a zero ref_count in
g_object_notify_by_pspec and leave if it is 0.
This allows using functions in ->finalize() that possibly also
notify a property change on the object. Previously,
this resulted in an error from g_object_ref.
https://bugzilla.gnome.org/show_bug.cgi?id=705570
g_return_if_fail (G_IS_OBJECT (object));
g_return_if_fail (G_IS_PARAM_SPEC (pspec));
+ if (g_atomic_int_get (&object->ref_count) == 0)
+ return;
+
g_object_ref (object);
g_object_notify_by_spec_internal (object, pspec);
g_object_unref (object);
{
g_free (((TestObject *) gobject)->baz);
+ /* When the ref_count of an object is zero it is still
+ * possible to notify the property, but it should do
+ * nothing and silenty quit (bug #705570)
+ */
+ g_object_notify (gobject, "foo");
+ g_object_notify_by_pspec (gobject, properties[PROP_BAR]);
+
G_OBJECT_CLASS (test_object_parent_class)->finalize (gobject);
}