Fixes by w3seek regarding interlocked functions. These were due to my missing a mismatch between the glib functions and windows variants. Modified: trunk/reactos/lib/rosrtl/misc/intrlck.c _____
Modified: trunk/reactos/lib/rosrtl/misc/intrlck.c --- trunk/reactos/lib/rosrtl/misc/intrlck.c 2005-03-08 22:41:27 UTC (rev 13891) +++ trunk/reactos/lib/rosrtl/misc/intrlck.c 2005-03-08 23:01:54 UTC (rev 13892) @@ -136,8 +136,8 @@
"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 @@ :"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; }