[glib/gobject-speedups3: 2/2] Reduce locking overhead for param specs
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [glib/gobject-speedups3: 2/2] Reduce locking overhead for param specs
- Date: Fri, 20 May 2022 12:04:20 +0000 (UTC)
commit 798873218f5b47aea9cd454e1cfef75701cacf34
Author: Matthias Clasen <mclasen redhat com>
Date: Fri May 20 08:01:08 2022 -0400
Reduce locking overhead for param specs
Only take the pspec pool mutex once per
g_object_new or g_object_set call.
gobject/gobject.c | 24 ++++++++++++++++++------
1 file changed, 18 insertions(+), 6 deletions(-)
---
diff --git a/gobject/gobject.c b/gobject/gobject.c
index d35a94bb1d..63b2246e21 100644
--- a/gobject/gobject.c
+++ b/gobject/gobject.c
@@ -2354,12 +2354,14 @@ g_object_new_valist (GType object_type,
name = first_property_name;
+ g_param_spec_pool_acquire (pspec_pool);
+
do
{
gchar *error = NULL;
GParamSpec *pspec;
- pspec = g_param_spec_pool_lookup (pspec_pool, name, object_type, TRUE);
+ pspec = g_param_spec_pool_find (pspec_pool, name, object_type, TRUE);
if (!g_object_new_is_valid_property (object_type, pspec, name, params, n_params))
break;
@@ -2408,6 +2410,8 @@ g_object_new_valist (GType object_type,
}
while ((name = va_arg (var_args, const gchar *)));
+ g_param_spec_pool_release (pspec_pool);
+
object = g_object_new_internal (class, params, n_params);
while (n_params--)
@@ -2538,9 +2542,11 @@ g_object_setv (GObject *object,
if (_g_object_has_notify_handler (object))
nqueue = g_object_notify_queue_freeze (object, FALSE);
+ g_param_spec_pool_acquire (pspec_pool);
+
for (i = 0; i < n_properties; i++)
{
- pspec = g_param_spec_pool_lookup (pspec_pool, names[i], obj_type, TRUE);
+ pspec = g_param_spec_pool_find (pspec_pool, names[i], obj_type, TRUE);
if (!g_object_set_is_valid_property (object, pspec, names[i]))
break;
@@ -2548,6 +2554,8 @@ g_object_setv (GObject *object,
object_set_property (object, pspec, &values[i], nqueue);
}
+ g_param_spec_pool_release (pspec_pool);
+
if (nqueue)
g_object_notify_queue_thaw (object, nqueue);
@@ -2578,6 +2586,8 @@ g_object_set_valist (GObject *object,
if (_g_object_has_notify_handler (object))
nqueue = g_object_notify_queue_freeze (object, FALSE);
+ g_param_spec_pool_acquire (pspec_pool);
+
name = first_property_name;
while (name)
{
@@ -2586,10 +2596,10 @@ g_object_set_valist (GObject *object,
gchar *error = NULL;
GTypeValueTable *vtab;
- pspec = g_param_spec_pool_lookup (pspec_pool,
- name,
- G_OBJECT_TYPE (object),
- TRUE);
+ pspec = g_param_spec_pool_find (pspec_pool,
+ name,
+ G_OBJECT_TYPE (object),
+ TRUE);
if (!g_object_set_is_valid_property (object, pspec, name))
break;
@@ -2614,6 +2624,8 @@ g_object_set_valist (GObject *object,
name = va_arg (var_args, gchar*);
}
+ g_param_spec_pool_release (pspec_pool);
+
if (nqueue)
g_object_notify_queue_thaw (object, nqueue);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]