diff --git a/src/mzscheme/src/env.c b/src/mzscheme/src/env.c index 8c4de23ddf..bb8f7fd4d5 100644 --- a/src/mzscheme/src/env.c +++ b/src/mzscheme/src/env.c @@ -437,6 +437,7 @@ static Scheme_Env *place_instance_init_post_kernel() { scheme_init_eval_places(); scheme_init_regexp_places(); scheme_init_stx_places(); + scheme_init_sema_places(); env = scheme_make_empty_env(); scheme_set_param(scheme_current_config(), MZCONFIG_ENV, (Scheme_Object *)env); diff --git a/src/mzscheme/src/schpriv.h b/src/mzscheme/src/schpriv.h index a4b7d58d91..58adacc95f 100644 --- a/src/mzscheme/src/schpriv.h +++ b/src/mzscheme/src/schpriv.h @@ -231,6 +231,7 @@ void scheme_init_port_places(void); void scheme_init_regexp_places(void); void scheme_init_stx_places(void); void scheme_init_fun_places(void); +void scheme_init_sema_places(void); void scheme_init_print_global_constants(void); void register_network_evts(); @@ -333,7 +334,7 @@ extern Scheme_Object *scheme_stack_dump_key; extern Scheme_Object *scheme_default_prompt_tag; -extern Scheme_Object *scheme_system_idle_channel; +extern THREAD_LOCAL Scheme_Object *scheme_system_idle_channel; extern Scheme_Object *scheme_input_port_property, *scheme_output_port_property; diff --git a/src/mzscheme/src/sema.c b/src/mzscheme/src/sema.c index 0e927e49a8..aaecd491a6 100644 --- a/src/mzscheme/src/sema.c +++ b/src/mzscheme/src/sema.c @@ -24,7 +24,7 @@ #ifndef NO_SCHEME_THREADS Scheme_Object *scheme_always_ready_evt; -Scheme_Object *scheme_system_idle_channel; +THREAD_LOCAL Scheme_Object *scheme_system_idle_channel; static Scheme_Object *make_sema(int n, Scheme_Object **p); static Scheme_Object *semap(int n, Scheme_Object **p); @@ -196,9 +196,6 @@ void scheme_init_sema(Scheme_Env *env) o->type = scheme_thread_recv_evt_type; thread_recv_evt = o; - REGISTER_SO(scheme_system_idle_channel); - scheme_system_idle_channel = scheme_make_channel(); - scheme_add_evt(scheme_sema_type, sema_ready, NULL, NULL, 0); scheme_add_evt_through_sema(scheme_semaphore_repost_type, sema_for_repost, NULL); scheme_add_evt(scheme_channel_type, (Scheme_Ready_Fun)channel_get_ready, NULL, NULL, 1); @@ -210,6 +207,11 @@ void scheme_init_sema(Scheme_Env *env) scheme_add_evt(scheme_thread_recv_evt_type, (Scheme_Ready_Fun)thread_recv_ready, NULL, NULL, 0); } +void scheme_init_sema_places() { + REGISTER_SO(scheme_system_idle_channel); + scheme_system_idle_channel = scheme_make_channel(); +} + Scheme_Object *scheme_make_sema(long v) { Scheme_Sema *sema;