$NetBSD: patch-ext_atomic__reference.c,v 1.1 2015/02/01 13:53:50 taca Exp $ * Utilize atomic_ops(3) if available. * Try to include proper header file. --- ext/atomic_reference.c.orig 2014-08-19 08:53:02.000000000 +0000 +++ ext/atomic_reference.c @@ -11,12 +11,17 @@ // limitations under the License. #include -#if defined(__sun) -#include -#endif -#ifdef HAVE_LIBKERN_OSATOMIC_H -#include +#ifdef HAVE_SYS_ATOMIC_H +#include +#else +# ifdef HAVE_ATOMIC_H +# include +# else +# ifdef HAVE_LIBKERN_OSATOMIC_H +# include +# endif +# endif #endif static void ir_mark(void *value) { @@ -53,7 +58,11 @@ static VALUE ir_get_and_set(VALUE self, } static VALUE ir_compare_and_set(volatile VALUE self, VALUE expect_value, VALUE new_value) { -#if __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ >= 1050 +#if defined(__NetBSD__) + if (atomic_cas_ptr((volatile void *) &DATA_PTR(self), expect_value, new_value)) { + return Qtrue; + } +#elif __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ >= 1050 if (OSAtomicCompareAndSwap64(expect_value, new_value, &DATA_PTR(self))) { return Qtrue; }