diff options
Diffstat (limited to 'poky/meta/recipes-core/glib-2.0/glib-2.0/0027-gtype-Add-some-missing-atomic-accesses-to-init_state.patch')
-rw-r--r-- | poky/meta/recipes-core/glib-2.0/glib-2.0/0027-gtype-Add-some-missing-atomic-accesses-to-init_state.patch | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/poky/meta/recipes-core/glib-2.0/glib-2.0/0027-gtype-Add-some-missing-atomic-accesses-to-init_state.patch b/poky/meta/recipes-core/glib-2.0/glib-2.0/0027-gtype-Add-some-missing-atomic-accesses-to-init_state.patch new file mode 100644 index 000000000..9c4e45ff4 --- /dev/null +++ b/poky/meta/recipes-core/glib-2.0/glib-2.0/0027-gtype-Add-some-missing-atomic-accesses-to-init_state.patch @@ -0,0 +1,76 @@ +From 47da8ec5d9a284e07f77c7d59fc8eacf3ebf188a Mon Sep 17 00:00:00 2001 +From: Philip Withnall <pwithnall@endlessos.org> +Date: Mon, 16 Nov 2020 16:57:22 +0000 +Subject: [PATCH 27/29] gtype: Add some missing atomic accesses to init_state +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Half of the references to `init_state` in `gtype.c` already correctly +accessed it atomically, but a couple didn’t. Drop the `volatile` +qualifier from its declaration, as that’s not necessary for atomic +access. + +Note that this is the `init_state` in `TypeData`, *not* the `init_state` +in `IFaceEntry`. + +Signed-off-by: Philip Withnall <pwithnall@endlessos.org> + +Helps: #600 +Upstream-Status: Backport [https://gitlab.gnome.org/GNOME/glib/-/merge_requests/1719] +--- + gobject/gtype.c | 10 +++++----- + 1 file changed, 5 insertions(+), 5 deletions(-) + +diff --git a/gobject/gtype.c b/gobject/gtype.c +index ae1af8a05..909faf138 100644 +--- a/gobject/gtype.c ++++ b/gobject/gtype.c +@@ -322,7 +322,7 @@ struct _ClassData + CommonData common; + guint16 class_size; + guint16 class_private_size; +- int volatile init_state; /* atomic - g_type_class_ref reads it unlocked */ ++ int init_state; /* (atomic) - g_type_class_ref reads it unlocked */ + GBaseInitFunc class_init_base; + GBaseFinalizeFunc class_finalize_base; + GClassInitFunc class_init; +@@ -336,7 +336,7 @@ struct _InstanceData + CommonData common; + guint16 class_size; + guint16 class_private_size; +- int volatile init_state; /* atomic - g_type_class_ref reads it unlocked */ ++ int init_state; /* (atomic) - g_type_class_ref reads it unlocked */ + GBaseInitFunc class_init_base; + GBaseFinalizeFunc class_finalize_base; + GClassInitFunc class_init; +@@ -1415,7 +1415,7 @@ type_node_add_iface_entry_W (TypeNode *node, + + if (parent_entry) + { +- if (node->data && node->data->class.init_state >= BASE_IFACE_INIT) ++ if (node->data && g_atomic_int_get (&node->data->class.init_state) >= BASE_IFACE_INIT) + { + entries->entry[i].init_state = INITIALIZED; + entries->entry[i].vtable = parent_entry->vtable; +@@ -1481,7 +1481,7 @@ type_add_interface_Wm (TypeNode *node, + */ + if (node->data) + { +- InitState class_state = node->data->class.init_state; ++ InitState class_state = g_atomic_int_get (&node->data->class.init_state); + + if (class_state >= BASE_IFACE_INIT) + type_iface_vtable_base_init_Wm (iface, node); +@@ -2175,7 +2175,7 @@ type_class_init_Wm (TypeNode *node, + g_assert (node->is_classed && node->data && + node->data->class.class_size && + !node->data->class.class && +- node->data->class.init_state == UNINITIALIZED); ++ g_atomic_int_get (&node->data->class.init_state) == UNINITIALIZED); + if (node->data->class.class_private_size) + class = g_malloc0 (ALIGN_STRUCT (node->data->class.class_size) + node->data->class.class_private_size); + else +-- +2.30.1 + |