зеркало из https://github.com/github/ruby.git
Use pthread API if the target platform doesn't support TLS attribute
This commit is contained in:
Родитель
4de514da38
Коммит
c41a7012ca
|
@ -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
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче