mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-07-16 15:10:23 +02:00
Avoid g_type_class_peek
Most of the time, properties belong to the class we set them on. Check that first, before going into GType, which takes locks and whatnot.
This commit is contained in:
@@ -1546,16 +1546,17 @@ object_get_property (GObject *object,
|
||||
GParamSpec *pspec,
|
||||
GValue *value)
|
||||
{
|
||||
GObjectClass *class = g_type_class_peek (pspec->owner_type);
|
||||
GTypeInstance *inst = (GTypeInstance *) object;
|
||||
GObjectClass *class;
|
||||
guint param_id = PARAM_SPEC_PARAM_ID (pspec);
|
||||
GParamSpec *redirect;
|
||||
|
||||
if (class == NULL)
|
||||
{
|
||||
g_warning ("'%s::%s' is not a valid property name; '%s' is not a GObject subtype",
|
||||
g_type_name (pspec->owner_type), pspec->name, g_type_name (pspec->owner_type));
|
||||
return;
|
||||
}
|
||||
if (G_LIKELY (inst->g_class->g_type == pspec->owner_type))
|
||||
class = (GObjectClass *) inst->g_class;
|
||||
else
|
||||
class = g_type_class_peek (pspec->owner_type);
|
||||
|
||||
g_assert (class != NULL);
|
||||
|
||||
redirect = g_param_spec_get_redirect_target (pspec);
|
||||
if (redirect)
|
||||
@@ -1572,17 +1573,18 @@ object_set_property (GObject *object,
|
||||
const GValue *value,
|
||||
GObjectNotifyQueue *nqueue)
|
||||
{
|
||||
GObjectClass *class = g_type_class_peek (pspec->owner_type);
|
||||
GTypeInstance *inst = (GTypeInstance *) object;
|
||||
GObjectClass *class;
|
||||
GParamSpecClass *pclass;
|
||||
guint param_id = PARAM_SPEC_PARAM_ID (pspec);
|
||||
GParamSpec *redirect;
|
||||
|
||||
if (G_UNLIKELY (class == NULL))
|
||||
{
|
||||
g_warning ("'%s::%s' is not a valid property name; '%s' is not a GObject subtype",
|
||||
g_type_name (pspec->owner_type), pspec->name, g_type_name (pspec->owner_type));
|
||||
return;
|
||||
}
|
||||
if (G_LIKELY (inst->g_class->g_type == pspec->owner_type))
|
||||
class = (GObjectClass *) inst->g_class;
|
||||
else
|
||||
class = g_type_class_peek (pspec->owner_type);
|
||||
|
||||
g_assert (class != NULL);
|
||||
|
||||
redirect = g_param_spec_get_redirect_target (pspec);
|
||||
if (redirect)
|
||||
|
Reference in New Issue
Block a user