Skip to content

Commit fbb2847

Browse files
committed
Improve MemoryBarrier() implementation
See thread "[HarfBuzz] compilation error of 0.9.26 with MinGW" started by Werner.
1 parent 189bf23 commit fbb2847

File tree

1 file changed

+8
-4
lines changed

1 file changed

+8
-4
lines changed

src/hb-atomic-private.hh

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -47,18 +47,22 @@
4747
#define WIN32_LEAN_AND_MEAN
4848
#include <windows.h>
4949

50-
#if defined(__MINGW32__) && !defined(MemoryBarrier)
50+
/* MinGW has a convoluted history of supporting MemoryBarrier
51+
* properly. As such, define a function to wrap the whole
52+
* thing. */
5153
static inline void _HBMemoryBarrier (void) {
54+
#if !defined(MemoryBarrier)
5255
long dummy = 0;
5356
InterlockedExchange (&dummy, 1);
54-
}
55-
# define MemoryBarrier _HBMemoryBarrier
57+
#else
58+
MemoryBarrier ();
5659
#endif
60+
}
5761

5862
typedef LONG hb_atomic_int_t;
5963
#define hb_atomic_int_add(AI, V) InterlockedExchangeAdd (&(AI), (V))
6064

61-
#define hb_atomic_ptr_get(P) (MemoryBarrier (), (void *) *(P))
65+
#define hb_atomic_ptr_get(P) (_HBMemoryBarrier (), (void *) *(P))
6266
#define hb_atomic_ptr_cmpexch(P,O,N) (InterlockedCompareExchangePointer ((void **) (P), (void *) (N), (void *) (O)) == (void *) (O))
6367

6468

0 commit comments

Comments
 (0)