Hi Behdad,

It seems that there's a problem with the use of <intrin.h> in some versions of 
MSVC - apparently some older SDK versions are buggy and it leads to a conflict 
with <windows.h>. I ran into this when things built fine for me locally, with 
VC2010, but failed on our tinderbox machines with an older compiler (2005? 
2008?).

I don't know whether anyone is really relying on thread-safety at the moment. 
As a workaround, I'd suggest just disabling the use of the MS intrinsics when 
building with older tools. If someone really needs this, they could be 
encouraged to use the latest toolset.

So, suggested patch:

diff --git a/harfbuzz/src/hb-object-private.hh 
b/harfbuzz/src/hb-object-private.hh
--- a/harfbuzz/src/hb-object-private.hh
+++ b/harfbuzz/src/hb-object-private.hh
@@ -54,29 +54,33 @@
 #include <glib.h>
 
 typedef volatile int hb_atomic_int_t;
 #define hb_atomic_int_fetch_and_add(AI, V)     g_atomic_int_exchange_and_add 
(&(AI), V)
 #define hb_atomic_int_get(AI)                  g_atomic_int_get (&(AI))
 #define hb_atomic_int_set(AI, V)               g_atomic_int_set (&(AI), V)
 
 
-#elif defined(_MSC_VER)
+#elif _MSC_VER >= 1600
 
 #include <intrin.h>
 
 typedef long hb_atomic_int_t;
 #define hb_atomic_int_fetch_and_add(AI, V)     _InterlockedExchangeAdd (&(AI), 
V)
 #define hb_atomic_int_get(AI)                  (_ReadBarrier (), (AI))
 #define hb_atomic_int_set(AI, V)               ((void) _InterlockedExchange 
(&(AI), (V)))
 
 
 #else
 
+#ifdef _MSC_VER
+#pragma message("Could not find any system to define atomic_int macros, 
library will NOT be thread-safe")
+#else
 #warning "Could not find any system to define atomic_int macros, library will 
NOT be thread-safe"
+#endif
 
 typedef volatile int hb_atomic_int_t;
 #define hb_atomic_int_fetch_and_add(AI, V)     ((AI) += (V), (AI) - (V))
 #define hb_atomic_int_get(AI)                  (AI)
 #define hb_atomic_int_set(AI, V)               ((void) ((AI) = (V)))
 
 
 #endif

(Note that MSVC doesn't recognize #warning, so it's necessary to provide an 
alternative, as above.)

JK

_______________________________________________
HarfBuzz mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/harfbuzz

Reply via email to