From d2aaf865e3e5ecfcd10c879ce4263dc3a8f7fccf Mon Sep 17 00:00:00 2001 From: Nobuyoshi Nakada Date: Mon, 11 Jan 2021 11:31:52 +0900 Subject: [PATCH] [ruby/etc] Added fallback definition of RUBY_ATOMIC_EXCHANGE https://github.com/ruby/etc/commit/0c5900bd21 --- ext/etc/etc.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/ext/etc/etc.c b/ext/etc/etc.c index 44273ff9ad..50f566d10f 100644 --- a/ext/etc/etc.c +++ b/ext/etc/etc.c @@ -68,6 +68,15 @@ void rb_deprecate_constant(VALUE mod, const char *name); typedef int rb_atomic_t; # define RUBY_ATOMIC_CAS(var, oldval, newval) \ ((var) == (oldval) ? ((var) = (newval), (oldval)) : (var)) +# define RUBY_ATOMIC_EXCHANGE(var, newval) \ + atomic_exchange(&var, newval) +static inline rb_atomic_t +atomic_exchange(volatile rb_atomic_t *var, rb_atomic_t newval) +{ + rb_atomic_t oldval = *var; + *var = newval; + return oldval; +} #endif /* call-seq: