diff options
author | Philip Withnall <pwithnall@endlessos.org> | 2020-11-16 16:57:22 +0000 |
---|---|---|
committer | Philip Withnall <pwithnall@endlessos.org> | 2020-11-20 14:41:07 +0000 |
commit | 47da8ec5d9a284e07f77c7d59fc8eacf3ebf188a (patch) | |
tree | 59297303f10227dbc00402dfb65b36d8b8c73306 | |
parent | 041dd8b70bd14b041d6a495492eb7a5fc7568bb7 (diff) | |
download | glib-47da8ec5d9a284e07f77c7d59fc8eacf3ebf188a.tar.gz |
gtype: Add some missing atomic accesses to init_state
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
-rw-r--r-- | gobject/gtype.c | 10 |
1 files 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 |