src/hb-atomic-private.hh | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-)
New commits: commit fbb2847f541389f40718af71c4945024ae177ab2 Author: Behdad Esfahbod <[email protected]> Date: Wed Feb 5 08:22:06 2014 -0500 Improve MemoryBarrier() implementation See thread "[HarfBuzz] compilation error of 0.9.26 with MinGW" started by Werner. diff --git a/src/hb-atomic-private.hh b/src/hb-atomic-private.hh index b5d6485..1c4e120 100644 --- a/src/hb-atomic-private.hh +++ b/src/hb-atomic-private.hh @@ -47,18 +47,22 @@ #define WIN32_LEAN_AND_MEAN #include <windows.h> -#if defined(__MINGW32__) && !defined(MemoryBarrier) +/* MinGW has a convoluted history of supporting MemoryBarrier + * properly. As such, define a function to wrap the whole + * thing. */ static inline void _HBMemoryBarrier (void) { +#if !defined(MemoryBarrier) long dummy = 0; InterlockedExchange (&dummy, 1); -} -# define MemoryBarrier _HBMemoryBarrier +#else + MemoryBarrier (); #endif +} typedef LONG hb_atomic_int_t; #define hb_atomic_int_add(AI, V) InterlockedExchangeAdd (&(AI), (V)) -#define hb_atomic_ptr_get(P) (MemoryBarrier (), (void *) *(P)) +#define hb_atomic_ptr_get(P) (_HBMemoryBarrier (), (void *) *(P)) #define hb_atomic_ptr_cmpexch(P,O,N) (InterlockedCompareExchangePointer ((void **) (P), (void *) (N), (void *) (O)) == (void *) (O)) _______________________________________________ HarfBuzz mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/harfbuzz
