From e70a4eef7762f20d4a33a298c9641c0ada3cb80d Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Tue, 17 May 2022 07:11:19 -0400 Subject: [PATCH] Avoid g_object_ref/unref in some cases We only need to take a ref on the object when we call out to external code (ie around ->dispatch_properties_changed). If we avoid the signal emission, we can avoid the ref/unref too. This is not currently happening, but might in the future. --- gobject/gobject.c | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/gobject/gobject.c b/gobject/gobject.c index dedac0443..f5b9cf6dd 100644 --- a/gobject/gobject.c +++ b/gobject/gobject.c @@ -1342,9 +1342,15 @@ g_object_notify_by_spec_internal (GObject *object, g_object_notify_queue_thaw (object, nqueue); } else - /* not frozen, so just dispatch the notification directly */ - G_OBJECT_GET_CLASS (object) - ->dispatch_properties_changed (object, 1, &pspec); + { + g_object_ref (object); + + /* not frozen, so just dispatch the notification directly */ + G_OBJECT_GET_CLASS (object) + ->dispatch_properties_changed (object, 1, &pspec); + + g_object_unref (object); + } } } @@ -1375,7 +1381,6 @@ g_object_notify (GObject *object, if (g_atomic_int_get (&object->ref_count) == 0) return; - g_object_ref (object); /* We don't need to get the redirect target * (by, e.g. calling g_object_class_find_property()) * because g_object_notify_queue_add() does that @@ -1392,7 +1397,6 @@ g_object_notify (GObject *object, property_name); else g_object_notify_by_spec_internal (object, pspec); - g_object_unref (object); } /** @@ -1451,9 +1455,7 @@ g_object_notify_by_pspec (GObject *object, 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); } /**