summaryrefslogtreecommitdiff
path: root/thread_pthread.h
diff options
context:
space:
mode:
Diffstat (limited to 'thread_pthread.h')
-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