diff --git a/thread_pthread.c b/thread_pthread.c index 451f47e07f..5c181556b9 100644 --- a/thread_pthread.c +++ b/thread_pthread.c @@ -1052,7 +1052,7 @@ static void * thread_start_func_1(void *th_ptr) { rb_thread_t *th = th_ptr; - RB_ALTSTACK_INIT(void *altstack, th->altstack); + RB_ALTSTACK_INIT(void *altstack, th->nt->altstack); #if USE_THREAD_CACHE thread_start: #endif @@ -1208,7 +1208,7 @@ native_thread_create(rb_thread_t *th) const size_t space = space_size(stack_size); #ifdef USE_SIGALTSTACK - th->altstack = rb_allocate_sigaltstack(); + th->nt->altstack = rb_allocate_sigaltstack(); #endif th->ec->machine.stack_maxsize = stack_size - space; diff --git a/thread_pthread.h b/thread_pthread.h index 8e8c1eb43d..ebca71b5cd 100644 --- a/thread_pthread.h +++ b/thread_pthread.h @@ -50,6 +50,10 @@ struct rb_native_thread { rb_nativethread_cond_t intr; /* th->interrupt_lock */ rb_nativethread_cond_t readyq; /* use sched->lock */ } cond; + +#ifdef USE_SIGALTSTACK + void *altstack; +#endif }; #undef except diff --git a/vm_core.h b/vm_core.h index 58fb1e7e3b..2fca0aecd2 100644 --- a/vm_core.h +++ b/vm_core.h @@ -101,9 +101,6 @@ extern int ruby_assert_critical_section_entered; #include "vm_opts.h" #include "ruby/thread_native.h" -#include THREAD_IMPL_H - -#define RUBY_VM_THREAD_MODEL 2 /* * implementation selector of get_insn_info algorithm @@ -162,6 +159,9 @@ void *rb_register_sigaltstack(void *); # define RB_ALTSTACK(var) (0) #endif +#include THREAD_IMPL_H +#define RUBY_VM_THREAD_MODEL 2 + /*****************/ /* configuration */ /*****************/ @@ -1072,10 +1072,6 @@ typedef struct rb_thread_struct { VALUE name; struct rb_ext_config ext_config; - -#ifdef USE_SIGALTSTACK - void *altstack; -#endif } rb_thread_t; static inline unsigned int