From d97c948567e85cb7b9c24b92544dafec8fdea906 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Wed, 29 Sep 2021 01:38:43 -0400 Subject: [PATCH 1/2] Don't inline deprecation warnings The code that emits property deprecation warnings rarely runs, and doesn't need to be inlined everywhere. It is enough to inline the check for the deprecation flag. --- gobject/gobject.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/gobject/gobject.c b/gobject/gobject.c index 3348426a8..d8448fb17 100644 --- a/gobject/gobject.c +++ b/gobject/gobject.c @@ -1492,16 +1492,13 @@ g_object_thaw_notify (GObject *object) } static void -consider_issuing_property_deprecation_warning (const GParamSpec *pspec) +maybe_issue_property_deprecation_warning (const GParamSpec *pspec) { static GHashTable *already_warned_table; static const gchar *enable_diagnostic; static GMutex already_warned_lock; gboolean already; - if (!(pspec->flags & G_PARAM_DEPRECATED)) - return; - if (g_once_init_enter (&enable_diagnostic)) { const gchar *value = g_getenv ("G_ENABLE_DIAGNOSTIC"); @@ -1541,6 +1538,13 @@ consider_issuing_property_deprecation_warning (const GParamSpec *pspec) g_type_name (pspec->owner_type), pspec->name); } +static inline void +consider_issuing_property_deprecation_warning (const GParamSpec *pspec) +{ + if (G_UNLIKELY (pspec->flags & G_PARAM_DEPRECATED)) + maybe_issue_property_deprecation_warning (pspec); +} + static inline void object_get_property (GObject *object, GParamSpec *pspec, From a4940943e564588c9c6d85328de7981df365dd2d Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Sat, 14 May 2022 23:26:58 -0400 Subject: [PATCH 2/2] Move deprecation warnings to object_set_property A small reorg that reduces the code and matches what we do for object_get_property. Note that as a consequence of this change, we now check the deprecated flag on the redirected property, not on the original when setting properties. This matches what we were already doing for getting properties. --- gobject/gobject.c | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) diff --git a/gobject/gobject.c b/gobject/gobject.c index d8448fb17..dedac0443 100644 --- a/gobject/gobject.c +++ b/gobject/gobject.c @@ -1592,6 +1592,8 @@ object_set_property (GObject *object, if (redirect) pspec = redirect; + consider_issuing_property_deprecation_warning (pspec); + pclass = G_PARAM_SPEC_GET_CLASS (pspec); if (g_value_type_compatible (G_VALUE_TYPE (value), pspec->value_type) && (pclass->value_validate == NULL || @@ -2021,10 +2023,7 @@ g_object_new_with_custom_constructor (GObjectClass *class, /* set remaining properties */ for (i = 0; i < n_params; i++) if (!(params[i].pspec->flags & (G_PARAM_CONSTRUCT | G_PARAM_CONSTRUCT_ONLY))) - { - consider_issuing_property_deprecation_warning (params[i].pspec); - object_set_property (object, params[i].pspec, params[i].value, nqueue); - } + object_set_property (object, params[i].pspec, params[i].value, nqueue); /* If nqueue is non-NULL then we are frozen. Thaw it. */ if (nqueue) @@ -2072,7 +2071,6 @@ g_object_new_internal (GObjectClass *class, for (j = 0; j < n_params; j++) if (params[j].pspec == pspec) { - consider_issuing_property_deprecation_warning (pspec); value = params[j].value; break; } @@ -2098,10 +2096,7 @@ g_object_new_internal (GObjectClass *class, */ for (i = 0; i < n_params; i++) if (!(params[i].pspec->flags & (G_PARAM_CONSTRUCT | G_PARAM_CONSTRUCT_ONLY))) - { - consider_issuing_property_deprecation_warning (params[i].pspec); - object_set_property (object, params[i].pspec, params[i].value, nqueue); - } + object_set_property (object, params[i].pspec, params[i].value, nqueue); g_object_notify_queue_thaw (object, nqueue); } @@ -2519,7 +2514,6 @@ g_object_setv (GObject *object, if (!g_object_set_is_valid_property (object, pspec, names[i])) break; - consider_issuing_property_deprecation_warning (pspec); object_set_property (object, pspec, &values[i], nqueue); } @@ -2574,7 +2568,6 @@ g_object_set_valist (GObject *object, break; } - consider_issuing_property_deprecation_warning (pspec); object_set_property (object, pspec, &value, nqueue); /* We open-code g_value_unset() here to avoid the