static void ti_initthread(int16_t tid) { ti_tid = tid; jl_pgcstack = NULL; #ifdef JULIA_ENABLE_THREADING jl_all_heaps[tid] = jl_mk_thread_heap(); #else jl_mk_thread_heap(); #endif jl_all_task_states[tid].ptls = jl_get_ptls_states(); jl_all_task_states[tid].signal_stack = jl_install_thread_signal_handler(); }
static void ti_initthread(int16_t tid) { jl_tls_states_t *ptls = jl_get_ptls_states(); ptls->tid = tid; ptls->pgcstack = NULL; ptls->gc_state = 0; // GC unsafe #ifdef JULIA_ENABLE_THREADING jl_all_heaps[tid] = jl_mk_thread_heap(); #else jl_mk_thread_heap(); #endif jl_all_task_states[tid].ptls = ptls; jl_all_task_states[tid].signal_stack = jl_install_thread_signal_handler(); }
static void ti_initthread(int16_t tid) { jl_tls_states_t *ptls = jl_get_ptls_states(); #ifndef _OS_WINDOWS_ ptls->system_id = pthread_self(); #endif ptls->tid = tid; ptls->pgcstack = NULL; ptls->gc_state = 0; // GC unsafe // Conditionally initialize the safepoint address. See comment in // `safepoint.c` if (tid == 0) { ptls->safepoint = (size_t*)(jl_safepoint_pages + jl_page_size); } else { ptls->safepoint = (size_t*)(jl_safepoint_pages + jl_page_size * 2 + sizeof(size_t)); } ptls->defer_signal = 0; ptls->current_module = NULL; void *bt_data = malloc(sizeof(uintptr_t) * (JL_MAX_BT_SIZE + 1)); if (bt_data == NULL) { jl_printf(JL_STDERR, "could not allocate backtrace buffer\n"); gc_debug_critical_error(); abort(); } ptls->bt_data = (uintptr_t*)bt_data; jl_mk_thread_heap(ptls); jl_install_thread_signal_handler(); jl_all_tls_states[tid] = ptls; }