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);
|
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,
|
||||||
|
Loading…
Reference in New Issue
Block a user