diff options
author | M Joonas Pihlaja <jpihlaja@cc.helsinki.fi> | 2009-06-21 14:02:46 +0100 |
---|---|---|
committer | M Joonas Pihlaja <jpihlaja@cc.helsinki.fi> | 2009-06-21 17:34:12 +0300 |
commit | 80990c7f729a666fc646182a36ffd311d7396a1a (patch) | |
tree | ce67c289795d9459a67a6effe3b3dae8bba1d961 /src/cairo-atomic.c | |
parent | d0c1c9282164bffb76f7419873e93608dc6d9876 (diff) | |
download | cairo-80990c7f729a666fc646182a36ffd311d7396a1a.tar.gz |
[atomic] Use an integer __sync_val_compare_and_swap() for pointer CAS.
Fix an implicit pointer/integer cast in _cairo_atomic_ptr_cmpxchg()
when building with LLVM/clang.
The Intel synchronization primitives __sync_val_compare_and_swap()
are only defined by Intel for types int, long, long long and their
unsigned variants. This patch uses one of those for
_cairo_atomic_ptr_cmpxchg() instead of relying on a gcc extension of
__sync_val_compare_and_swap() to pointer types.
Diffstat (limited to 'src/cairo-atomic.c')
-rw-r--r-- | src/cairo-atomic.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/src/cairo-atomic.c b/src/cairo-atomic.c index 777ba5cdf..146ad857d 100644 --- a/src/cairo-atomic.c +++ b/src/cairo-atomic.c @@ -36,7 +36,11 @@ #include "cairo-atomic-private.h" #include "cairo-mutex-private.h" -#ifndef HAS_ATOMIC_OPS +#ifdef HAS_ATOMIC_OPS +COMPILE_TIME_ASSERT(sizeof(void*) == sizeof(int) || + sizeof(void*) == sizeof(long) || + sizeof(void*) == sizeof(long long)); +#else void _cairo_atomic_int_inc (int *x) { |