Bug #15013 ยป 0001-thread_pthread.c-reinitialize-ubf_list-at-fork.patch
thread.c | ||
---|---|---|
vm->main_thread = th;
|
||
gvl_atfork(th->vm);
|
||
ubf_list_atfork();
|
||
list_for_each(&vm->living_threads, i, vmlt_node) {
|
||
atfork(i, th);
|
thread_pthread.c | ||
---|---|---|
#define native_cleanup_push pthread_cleanup_push
|
||
#define native_cleanup_pop pthread_cleanup_pop
|
||
#if defined(USE_UBF_LIST)
|
||
static rb_nativethread_lock_t ubf_list_lock;
|
||
#endif
|
||
static pthread_key_t ruby_native_thread_key;
|
||
static void
|
||
... | ... | |
th->thread_id = pthread_self();
|
||
fill_thread_id_str(th);
|
||
native_thread_init(th);
|
||
#ifdef USE_UBF_LIST
|
||
rb_native_mutex_initialize(&ubf_list_lock);
|
||
#endif
|
||
posix_signal(SIGVTALRM, null_func);
|
||
}
|
||
... | ... | |
#ifdef USE_UBF_LIST
|
||
static LIST_HEAD(ubf_list_head);
|
||
static rb_nativethread_lock_t ubf_list_lock = RB_NATIVETHREAD_LOCK_INIT;
|
||
static void
|
||
ubf_list_atfork(void)
|
||
{
|
||
list_head_init(&ubf_list_head);
|
||
rb_native_mutex_initialize(&ubf_list_lock);
|
||
}
|
||
/* The thread 'th' is registered to be trying unblock. */
|
||
static void
|
thread_win32.c | ||
---|---|---|
#define ubf_wakeup_all_threads() do {} while (0)
|
||
#define ubf_threads_empty() (1)
|
||
#define ubf_timer_disarm() do {} while (0)
|
||
#define ubf_list_atfork() do {} while (0)
|
||
static volatile DWORD ruby_native_thread_key = TLS_OUT_OF_INDEXES;
|
||
-
|