summaryrefslogtreecommitdiff
path: root/recipes/glib-2.0/glib-2.0-2.22.1/bug-556515.patch
blob: b03a0afb3f5186680b2c4e99e59be0752892a9eb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
--- /tmp/gobject.c	2009-09-23 10:02:19.000000000 +0200
+++ glib-2.21.6/gobject/gobject.c	2009-09-23 14:52:46.000000000 +0200
@@ -2377,14 +2376,15 @@
 
   /* here we want to atomically do: if (ref_count>1) { ref_count--; return; } */
  retry_atomic_decrement1:
-  old_ref = g_atomic_int_get (&object->ref_count);
+  old_ref = g_atomic_int_get ((int *)&object->ref_count);
   if (old_ref > 1)
     {
+      gboolean do_toggle_ref_notify = (old_ref == 2 && OBJECT_HAS_TOGGLE_REF (object));
       if (!g_atomic_int_compare_and_exchange ((int *)&object->ref_count, old_ref, old_ref - 1))
 	goto retry_atomic_decrement1;
 
       /* if we went from 2->1 we need to notify toggle refs if any */
-      if (old_ref == 2 && OBJECT_HAS_TOGGLE_REF (object))
+      if (do_toggle_ref_notify)
 	toggle_refs_notify (object, TRUE);
     }
   else
@@ -2397,11 +2397,12 @@
       old_ref = g_atomic_int_get ((int *)&object->ref_count);
       if (old_ref > 1)
         {
+          gboolean do_toggle_ref_notify = (old_ref == 2 && OBJECT_HAS_TOGGLE_REF (object));
           if (!g_atomic_int_compare_and_exchange ((int *)&object->ref_count, old_ref, old_ref - 1))
 	    goto retry_atomic_decrement2;
 
           /* if we went from 2->1 we need to notify toggle refs if any */
-          if (old_ref == 2 && OBJECT_HAS_TOGGLE_REF (object))
+          if (do_toggle_ref_notify)
 	    toggle_refs_notify (object, TRUE);
           
 	  return;