Fixed.  Thanks.

On 10/17/2011 02:27 AM, Jonathan Kew wrote:
> 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