Use atomic load to read interrupt mask

This commit is contained in:
John Hawthorn 2025-05-14 18:28:53 -07:00
parent cd15cc250f
commit 05e0e7223a
Notes: git 2025-05-20 17:00:21 +00:00
4 changed files with 25 additions and 9 deletions

View file

@ -1,3 +1,6 @@
#ifndef INTERNAL_ATOMIC_H
#define INTERNAL_ATOMIC_H
#include "ruby/atomic.h"
/* shim macros only */
@ -21,3 +24,16 @@
#define ATOMIC_SUB(var, val) RUBY_ATOMIC_SUB(var, val)
#define ATOMIC_VALUE_CAS(var, oldval, val) RUBY_ATOMIC_VALUE_CAS(var, oldval, val)
#define ATOMIC_VALUE_EXCHANGE(var, val) RUBY_ATOMIC_VALUE_EXCHANGE(var, val)
static inline rb_atomic_t
rbimpl_atomic_load_relaxed(rb_atomic_t *ptr)
{
#if defined(HAVE_GCC_ATOMIC_BUILTINS)
return __atomic_load_n(ptr, __ATOMIC_RELAXED);
#else
return *ptr;
#endif
}
#define ATOMIC_LOAD_RELAXED(var) rbimpl_atomic_load_relaxed(&(var))
#endif