diff options
author | Nobuyoshi Nakada <nobu@ruby-lang.org> | 2022-12-19 13:27:33 +0900 |
---|---|---|
committer | Nobuyoshi Nakada <nobu@ruby-lang.org> | 2022-12-19 14:09:30 +0900 |
commit | c41a7012ca79ad9bcf6f4c7b422caac82c99fb98 (patch) | |
tree | 0e90b22298bf36307ab3f23f2958f5b981020cb7 /thread_pthread.h | |
parent | 4de514da383ef70d784e2ddded42e74375880996 (diff) |
Use pthread API if the target platform doesn't support TLS attribute
Diffstat (limited to 'thread_pthread.h')
-rw-r--r-- | thread_pthread.h | 35 |
1 files changed, 18 insertions, 17 deletions
diff --git a/thread_pthread.h b/thread_pthread.h index ebca71b5cd..0f8e4d6096 100644 --- a/thread_pthread.h +++ b/thread_pthread.h @@ -90,13 +90,25 @@ struct rb_thread_sched { int wait_yield; }; -#if __STDC_VERSION__ >= 201112 - #define RB_THREAD_LOCAL_SPECIFIER _Thread_local -#elif defined(__GNUC__) && !defined(RB_THREAD_LOCAL_SPECIFIER_IS_UNSUPPORTED) +#ifndef RB_THREAD_LOCAL_SPECIFIER_IS_UNSUPPORTED +# if __STDC_VERSION__ >= 201112 +# define RB_THREAD_LOCAL_SPECIFIER _Thread_local +# elif defined(__GNUC__) /* note that ICC (linux) and Clang are covered by __GNUC__ */ - #define RB_THREAD_LOCAL_SPECIFIER __thread -#else +# define RB_THREAD_LOCAL_SPECIFIER __thread +# endif +#endif +RUBY_SYMBOL_EXPORT_BEGIN +#ifdef RB_THREAD_LOCAL_SPECIFIER +# ifdef __APPLE__ +// on Darwin, TLS can not be accessed across .so +struct rb_execution_context_struct *rb_current_ec(void); +void rb_current_ec_set(struct rb_execution_context_struct *); +# else +RUBY_EXTERN RB_THREAD_LOCAL_SPECIFIER struct rb_execution_context_struct *ruby_current_ec; +# endif +#else typedef pthread_key_t native_tls_key_t; static inline void * @@ -113,19 +125,8 @@ native_tls_set(native_tls_key_t key, void *ptr) rb_bug("pthread_setspecific error"); } } -#endif -RUBY_SYMBOL_EXPORT_BEGIN -#ifdef RB_THREAD_LOCAL_SPECIFIER - #ifdef __APPLE__ - // on Darwin, TLS can not be accessed across .so - struct rb_execution_context_struct *rb_current_ec(void); - void rb_current_ec_set(struct rb_execution_context_struct *); - #else - RUBY_EXTERN RB_THREAD_LOCAL_SPECIFIER struct rb_execution_context_struct *ruby_current_ec; - #endif -#else - RUBY_EXTERN native_tls_key_t ruby_current_ec_key; +RUBY_EXTERN native_tls_key_t ruby_current_ec_key; #endif RUBY_SYMBOL_EXPORT_END |