mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-03-31 12:53:07 +02:00
Use g_atomic_pointer_or/and to set datalist flags
https://bugzilla.gnome.org/show_bug.cgi?id=650458
This commit is contained in:
parent
0a918c0d2a
commit
fca330dafa
@ -992,16 +992,10 @@ void
|
|||||||
g_datalist_set_flags (GData **datalist,
|
g_datalist_set_flags (GData **datalist,
|
||||||
guint flags)
|
guint flags)
|
||||||
{
|
{
|
||||||
gpointer oldvalue;
|
|
||||||
g_return_if_fail (datalist != NULL);
|
g_return_if_fail (datalist != NULL);
|
||||||
g_return_if_fail ((flags & ~G_DATALIST_FLAGS_MASK) == 0);
|
g_return_if_fail ((flags & ~G_DATALIST_FLAGS_MASK) == 0);
|
||||||
|
|
||||||
do
|
g_atomic_pointer_or (datalist, (gsize)flags);
|
||||||
{
|
|
||||||
oldvalue = g_atomic_pointer_get (datalist);
|
|
||||||
}
|
|
||||||
while (!g_atomic_pointer_compare_and_exchange ((void**) datalist, oldvalue,
|
|
||||||
(gpointer) ((gsize) oldvalue | flags)));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -1021,16 +1015,10 @@ void
|
|||||||
g_datalist_unset_flags (GData **datalist,
|
g_datalist_unset_flags (GData **datalist,
|
||||||
guint flags)
|
guint flags)
|
||||||
{
|
{
|
||||||
gpointer oldvalue;
|
|
||||||
g_return_if_fail (datalist != NULL);
|
g_return_if_fail (datalist != NULL);
|
||||||
g_return_if_fail ((flags & ~G_DATALIST_FLAGS_MASK) == 0);
|
g_return_if_fail ((flags & ~G_DATALIST_FLAGS_MASK) == 0);
|
||||||
|
|
||||||
do
|
g_atomic_pointer_and (datalist, ~(gsize)flags);
|
||||||
{
|
|
||||||
oldvalue = g_atomic_pointer_get (datalist);
|
|
||||||
}
|
|
||||||
while (!g_atomic_pointer_compare_and_exchange ((void**) datalist, oldvalue,
|
|
||||||
(gpointer) ((gsize) oldvalue & ~(gsize) flags)));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Loading…
x
Reference in New Issue
Block a user