зеркало из https://github.com/github/ruby.git
move atomic logic from mjit.c from ruby_atomic.h
This macro shall be shared among other files, not just for mjit.c. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@64156 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
Родитель
740a1706c8
Коммит
e62214be87
10
mjit.c
10
mjit.c
|
@ -140,15 +140,7 @@ typedef intptr_t pid_t;
|
|||
#endif
|
||||
|
||||
/* Atomically set function pointer if possible. */
|
||||
#ifdef _WIN32
|
||||
# ifdef InterlockedExchangePointer
|
||||
# define MJIT_ATOMIC_SET(var, val) InterlockedExchangePointer((void **)&(var), (void *)val)
|
||||
# else
|
||||
# define MJIT_ATOMIC_SET(var, val) (void)((var) = (val))
|
||||
# endif
|
||||
#else
|
||||
# define MJIT_ATOMIC_SET(var, val) ATOMIC_SET(var, val)
|
||||
#endif
|
||||
#define MJIT_ATOMIC_SET(var, val) ATOMIC_PTR_EXCHANGE(var, val)
|
||||
|
||||
/* A copy of MJIT portion of MRI options since MJIT initialization. We
|
||||
need them as MJIT threads still can work when the most MRI data were
|
||||
|
|
|
@ -90,6 +90,10 @@ rb_w32_atomic_cas(volatile rb_atomic_t *var, rb_atomic_t oldval, rb_atomic_t new
|
|||
# define ATOMIC_SIZE_EXCHANGE(var, val) InterlockedExchange((LONG *)&(var), (val))
|
||||
# endif
|
||||
|
||||
# ifdef InterlockedExchangePointer
|
||||
# define ATOMIC_PTR_EXCHANGE(var, val) InterlockedExchangePointer((PVOID volatile *)&(var), (PVOID)(val))
|
||||
# endif /* See below for definitions of other situations */
|
||||
|
||||
#elif defined(__sun) && defined(HAVE_ATOMIC_H)
|
||||
#include <atomic.h>
|
||||
typedef unsigned int rb_atomic_t;
|
||||
|
|
Загрузка…
Ссылка в новой задаче