diff options
| -rw-r--r-- | include/ruby/atomic.h | 9 | ||||
| -rw-r--r-- | ruby_atomic.h | 2 |
2 files changed, 10 insertions, 1 deletions
diff --git a/include/ruby/atomic.h b/include/ruby/atomic.h index 89e1111e4c..650891ab9c 100644 --- a/include/ruby/atomic.h +++ b/include/ruby/atomic.h @@ -1160,6 +1160,15 @@ RBIMPL_ATTR_ARTIFICIAL() RBIMPL_ATTR_NOALIAS() RBIMPL_ATTR_NONNULL((1)) static inline VALUE +rbimpl_atomic_value_load(volatile VALUE *ptr, int memory_order) +{ + return RBIMPL_CAST((VALUE)rbimpl_atomic_ptr_load((void **)ptr, memory_order)); +} + +RBIMPL_ATTR_ARTIFICIAL() +RBIMPL_ATTR_NOALIAS() +RBIMPL_ATTR_NONNULL((1)) +static inline VALUE rbimpl_atomic_value_cas(volatile VALUE *ptr, VALUE oldval, VALUE newval, int success_memorder, int failure_memorder) { RBIMPL_STATIC_ASSERT(sizeof_value, sizeof *ptr == sizeof(size_t)); diff --git a/ruby_atomic.h b/ruby_atomic.h index 2923275636..ad53356f06 100644 --- a/ruby_atomic.h +++ b/ruby_atomic.h @@ -3,7 +3,7 @@ #include "ruby/atomic.h" -#define RUBY_ATOMIC_VALUE_LOAD(x) (VALUE)(RUBY_ATOMIC_PTR_LOAD(x)) +#define RUBY_ATOMIC_VALUE_LOAD(x) rbimpl_atomic_value_load(&(x), RBIMPL_ATOMIC_SEQ_CST) /* shim macros only */ #define ATOMIC_ADD(var, val) RUBY_ATOMIC_ADD(var, val) |
