mirror of
				https://gitlab.gnome.org/GNOME/glib.git
				synced 2025-10-31 08:22:16 +01:00 
			
		
		
		
	Merge branch 'ebassi/floating-warning' into 'main'
Add a (diagnostic) warning for finalized floating objects Closes #2489 See merge request GNOME/glib!2247
This commit is contained in:
		| @@ -1182,6 +1182,24 @@ g_object_real_dispose (GObject *object) | |||||||
|   g_datalist_id_set_data (&object->qdata, quark_weak_locations, NULL); |   g_datalist_id_set_data (&object->qdata, quark_weak_locations, NULL); | ||||||
| } | } | ||||||
|  |  | ||||||
|  | static gboolean | ||||||
|  | floating_check (GObject *object) | ||||||
|  | { | ||||||
|  |   static const char *g_enable_diagnostic = NULL; | ||||||
|  |  | ||||||
|  |   if (G_UNLIKELY (g_enable_diagnostic == NULL)) | ||||||
|  |     { | ||||||
|  |       g_enable_diagnostic = g_getenv ("G_ENABLE_DIAGNOSTIC"); | ||||||
|  |       if (g_enable_diagnostic == NULL) | ||||||
|  |         g_enable_diagnostic = "0"; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |   if (g_enable_diagnostic[0] == '1') | ||||||
|  |     return g_object_is_floating (object); | ||||||
|  |  | ||||||
|  |   return FALSE; | ||||||
|  | } | ||||||
|  |  | ||||||
| static void | static void | ||||||
| g_object_finalize (GObject *object) | g_object_finalize (GObject *object) | ||||||
| { | { | ||||||
| @@ -1191,6 +1209,17 @@ g_object_finalize (GObject *object) | |||||||
|                   G_OBJECT_TYPE_NAME (object), object); |                   G_OBJECT_TYPE_NAME (object), object); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | #ifdef G_ENABLE_DEBUG | ||||||
|  |  if (floating_check (object)) | ||||||
|  |    { | ||||||
|  |       g_critical ("A floating object %s %p was finalized. This means that someone\n" | ||||||
|  |                   "called g_object_unref() on an object that had only a floating\n" | ||||||
|  |                   "reference; the initial floating reference is not owned by anyone\n" | ||||||
|  |                   "and must be removed with g_object_ref_sink().", | ||||||
|  |                   G_OBJECT_TYPE_NAME (object), object); | ||||||
|  |    } | ||||||
|  | #endif | ||||||
|  |  | ||||||
|   g_datalist_clear (&object->qdata); |   g_datalist_clear (&object->qdata); | ||||||
|    |    | ||||||
|   GOBJECT_IF_DEBUG (OBJECTS, |   GOBJECT_IF_DEBUG (OBJECTS, | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user