Use g_atomic_pointer_or/and to set datalist flags
authorAlexander Larsson <alexl@redhat.com>
Wed, 25 May 2011 09:56:51 +0000 (11:56 +0200)
committerMatthias Clasen <mclasen@redhat.com>
Sat, 4 Jun 2011 01:11:26 +0000 (21:11 -0400)
https://bugzilla.gnome.org/show_bug.cgi?id=650458

glib/gdataset.c

index c2582b9..3408558 100644 (file)
@@ -992,16 +992,10 @@ void
 g_datalist_set_flags (GData **datalist,
                      guint   flags)
 {
-  gpointer oldvalue;
   g_return_if_fail (datalist != NULL);
   g_return_if_fail ((flags & ~G_DATALIST_FLAGS_MASK) == 0);
-  
-  do
-    {
-      oldvalue = g_atomic_pointer_get (datalist);
-    }
-  while (!g_atomic_pointer_compare_and_exchange ((void**) datalist, oldvalue,
-                                                 (gpointer) ((gsize) oldvalue | flags)));
+
+  g_atomic_pointer_or (datalist, (gsize)flags);
 }
 
 /**
@@ -1021,16 +1015,10 @@ void
 g_datalist_unset_flags (GData **datalist,
                        guint   flags)
 {
-  gpointer oldvalue;
   g_return_if_fail (datalist != NULL);
   g_return_if_fail ((flags & ~G_DATALIST_FLAGS_MASK) == 0);
-  
-  do
-    {
-      oldvalue = g_atomic_pointer_get (datalist);
-    }
-  while (!g_atomic_pointer_compare_and_exchange ((void**) datalist, oldvalue,
-                                                 (gpointer) ((gsize) oldvalue & ~(gsize) flags)));
+
+  g_atomic_pointer_and (datalist, ~(gsize)flags);
 }
 
 /**