mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2024-12-26 15:36:14 +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:
commit
579ff9f6c9
@ -1182,6 +1182,24 @@ g_object_real_dispose (GObject *object)
|
||||
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
|
||||
g_object_finalize (GObject *object)
|
||||
{
|
||||
@ -1191,6 +1209,17 @@ g_object_finalize (GObject *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);
|
||||
|
||||
GOBJECT_IF_DEBUG (OBJECTS,
|
||||
|
Loading…
Reference in New Issue
Block a user