mirror of
				https://gitlab.gnome.org/GNOME/glib.git
				synced 2025-11-04 01:58:54 +01:00 
			
		
		
		
	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.
This commit is contained in:
		@@ -1342,9 +1342,15 @@ g_object_notify_by_spec_internal (GObject    *object,
 | 
			
		||||
          g_object_notify_queue_thaw (object, nqueue);
 | 
			
		||||
        }
 | 
			
		||||
      else
 | 
			
		||||
        {
 | 
			
		||||
          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);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user