Merge branch 'backport-4575-closure-race-fix-glib-2-84' into 'glib-2-84'

Backport !4575 “gclosure: fix ATOMIC_CHANGE_FIELD to read vint atomically” to glib-2-84

See merge request GNOME/glib!4576
This commit is contained in:
Michael Catanzaro
2025-04-04 14:05:12 +00:00

View File

@@ -110,15 +110,17 @@ typedef union {
G_STMT_START { \
ClosureInt *cunion = (ClosureInt*) _closure; \
gint new_int, old_int, success; \
old_int = g_atomic_int_get (&cunion->vint); \
do \
{ \
ClosureInt tmp; \
tmp.vint = old_int = cunion->vint; \
tmp.vint = old_int; \
_SET_OLD tmp.closure._field; \
tmp.closure._field _OP _value; \
_SET_NEW tmp.closure._field; \
new_int = tmp.vint; \
success = g_atomic_int_compare_and_exchange (&cunion->vint, old_int, new_int); \
success = g_atomic_int_compare_and_exchange_full (&cunion->vint, old_int, new_int,\
&old_int); \
} \
while (!success && _must_set); \
} G_STMT_END