summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/ruby/atomic.h9
-rw-r--r--ruby_atomic.h2
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)