diff --git a/src/mzscheme/gc2/newgc.c b/src/mzscheme/gc2/newgc.c index 6771384a35..bd6eda90c3 100644 --- a/src/mzscheme/gc2/newgc.c +++ b/src/mzscheme/gc2/newgc.c @@ -1865,7 +1865,6 @@ void GC_construct_child_gc() { } static inline void save_globals_to_gc(NewGC *gc) { - gc->saved_mark_stack = mark_stack; gc->saved_GC_variable_stack = GC_variable_stack; gc->saved_GC_gen0_alloc_page_ptr = GC_gen0_alloc_page_ptr; gc->saved_GC_gen0_alloc_page_end = GC_gen0_alloc_page_end; @@ -1873,7 +1872,6 @@ static inline void save_globals_to_gc(NewGC *gc) { } static inline void restore_globals_from_gc(NewGC *gc) { - mark_stack = gc->saved_mark_stack; GC_variable_stack = gc->saved_GC_variable_stack; GC_gen0_alloc_page_ptr = gc->saved_GC_gen0_alloc_page_ptr; GC_gen0_alloc_page_end = gc->saved_GC_gen0_alloc_page_end; diff --git a/src/mzscheme/src/env.c b/src/mzscheme/src/env.c index 312af4e013..8336e4776e 100644 --- a/src/mzscheme/src/env.c +++ b/src/mzscheme/src/env.c @@ -144,7 +144,7 @@ int scheme_is_module_begin_env(Scheme_Comp_Env *env); Scheme_Env *scheme_engine_instance_init(); Scheme_Env *scheme_place_instance_init(); static void place_instance_init_pre_kernel(); -static Scheme_Env *place_instance_init_post_kernel(); +static Scheme_Env *place_instance_init_post_kernel(int initial_main_os_thread); #ifdef MZ_PRECISE_GC static void register_traversers(void); @@ -361,7 +361,7 @@ Scheme_Env *scheme_engine_instance_init() { place_instance_init_pre_kernel(stack_base); make_kernel_env(); scheme_init_parameterization_readonly_globals(); - env = place_instance_init_post_kernel(); + env = place_instance_init_post_kernel(1); return env; } @@ -428,7 +428,7 @@ Scheme_Env *scheme_get_unsafe_env() { return unsafe_env; } -static Scheme_Env *place_instance_init_post_kernel() { +static Scheme_Env *place_instance_init_post_kernel(int initial_main_os_thread) { Scheme_Env *env; /* error handling and buffers */ /* this check prevents initializing orig ports twice for the first initial @@ -442,7 +442,7 @@ static Scheme_Env *place_instance_init_post_kernel() { scheme_init_logger(); scheme_init_eval_places(); scheme_init_regexp_places(); - scheme_init_stx_places(); + scheme_init_stx_places(initial_main_os_thread); scheme_init_sema_places(); scheme_init_gmp_places(); scheme_alloc_global_fdset(); @@ -497,7 +497,7 @@ static Scheme_Env *place_instance_init_post_kernel() { Scheme_Env *scheme_place_instance_init(void *stack_base) { place_instance_init_pre_kernel(stack_base); - return place_instance_init_post_kernel(); + return place_instance_init_post_kernel(0); } void scheme_place_instance_destroy() { diff --git a/src/mzscheme/src/schpriv.h b/src/mzscheme/src/schpriv.h index ff26738435..5c4c3b6989 100644 --- a/src/mzscheme/src/schpriv.h +++ b/src/mzscheme/src/schpriv.h @@ -230,7 +230,7 @@ void scheme_init_print_buffers_places(void); void scheme_init_eval_places(void); void scheme_init_port_places(void); void scheme_init_regexp_places(void); -void scheme_init_stx_places(void); +void scheme_init_stx_places(int initial_main_os_thread); void scheme_init_fun_places(void); void scheme_init_sema_places(void); void scheme_init_gmp_places(void); diff --git a/src/mzscheme/src/stxobj.c b/src/mzscheme/src/stxobj.c index 76c90aea1e..f50b26835b 100644 --- a/src/mzscheme/src/stxobj.c +++ b/src/mzscheme/src/stxobj.c @@ -631,7 +631,7 @@ void scheme_init_stx(Scheme_Env *env) scheme_install_type_reader2(scheme_free_id_info_type, read_free_id_info_prefix); } -void scheme_init_stx_places() { +void scheme_init_stx_places(int initial_main_os_thread) { REGISTER_SO(last_phase_shift); REGISTER_SO(nominal_ipair_cache); REGISTER_SO(quick_hash_table); @@ -639,6 +639,14 @@ void scheme_init_stx_places() { REGISTER_SO(than_id_marks_ht); REGISTER_SO(interned_skip_ribs); REGISTER_SO(unsealed_dependencies); + + if (!initial_main_os_thread) { + REGISTER_SO(mark_id); + REGISTER_SO(current_rib_timestamp); + mark_id = scheme_make_integer(0); + current_rib_timestamp = scheme_make_integer(0); + } + interned_skip_ribs = scheme_make_weak_equal_table(); }