Fixes by w3seek regarding interlocked functions. These were due to my
authorArt Yerkes <art.yerkes@gmail.com>
Tue, 8 Mar 2005 23:01:54 +0000 (23:01 +0000)
committerArt Yerkes <art.yerkes@gmail.com>
Tue, 8 Mar 2005 23:01:54 +0000 (23:01 +0000)
missing a mismatch between the glib functions and windows variants.

svn path=/trunk/; revision=13892

reactos/lib/rosrtl/misc/intrlck.c

index 3ccabe0..a5009a3 100644 (file)
@@ -136,8 +136,8 @@ InterlockedExchange(LPLONG target, LONG value )
                   "lock\n\txchgl %0,(%1)"
                   :"=r" (ret):"r" (target), "0" (value):"memory" );
 #elif defined(_M_PPC)
-        ret = *target;
-        while( InterlockedCompareExchange( target, value, ret ) != value );
+        ret = *(volatile LONG *)target;
+        while( InterlockedCompareExchange( target, value, ret ) != ret );
 #endif
        return ret;
 }
@@ -202,9 +202,11 @@ InterlockedExchangeAdd(
                   :"r" (Addend), "0" (Increment)
                   :"memory" );
 #elif defined(_M_PPC)
-        do
-            ret = *Addend;
-        while (!InterlockedCompareExchange(Addend, ret, ret + Increment));
+        LONG newval;
+        do {
+            ret = *(volatile LONG *)Addend;
+            newval = ret + Increment;
+        } while (InterlockedCompareExchange(Addend, ret, newval) != ret);
 #endif
        return ret;
 }