summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNobuyoshi Nakada <nobu@ruby-lang.org>2022-12-19 13:27:33 +0900
committerNobuyoshi Nakada <nobu@ruby-lang.org>2022-12-19 14:09:30 +0900
commitc41a7012ca79ad9bcf6f4c7b422caac82c99fb98 (patch)
tree0e90b22298bf36307ab3f23f2958f5b981020cb7
parent4de514da383ef70d784e2ddded42e74375880996 (diff)
Use pthread API if the target platform doesn't support TLS attribute
-rw-r--r--thread_pthread.h35
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