From 27215bcbca02419862ebd57a27d47302c3c94f0d Mon Sep 17 00:00:00 2001 From: Kevin Tew Date: Tue, 2 Jun 2009 16:24:19 +0000 Subject: [PATCH] Move global foreign creations to before MASTER GC switchout svn: r15049 --- src/foreign/foreign.c | 15 ++++++++++----- src/mzscheme/src/env.c | 3 +++ src/mzscheme/src/schpriv.h | 1 + 3 files changed, 14 insertions(+), 5 deletions(-) diff --git a/src/foreign/foreign.c b/src/foreign/foreign.c index 78bc3f62af..93d3a7dc49 100644 --- a/src/foreign/foreign.c +++ b/src/foreign/foreign.c @@ -2689,12 +2689,8 @@ void ctype_printer(Scheme_Object *ctype, int dis, Scheme_Print_Params *pp) /*****************************************************************************/ /* Initialization */ -void scheme_init_foreign(Scheme_Env *env) +void scheme_init_foreign_globals() { - Scheme_Env *menv; - ctype_struct *t; - Scheme_Object *s; - menv = scheme_primitive_module(scheme_intern_symbol("#%foreign"), env); ffi_lib_tag = scheme_make_type(""); ffi_obj_tag = scheme_make_type(""); ctype_tag = scheme_make_type(""); @@ -2706,6 +2702,7 @@ void scheme_init_foreign(Scheme_Env *env) GC_register_traversers(ffi_callback_tag, ffi_callback_SIZE, ffi_callback_MARK, ffi_callback_FIXUP, 1, 0); # endif /* MZ_PRECISE_GC */ scheme_set_type_printer(ctype_tag, ctype_printer); + MZ_REGISTER_STATIC(opened_libs); opened_libs = scheme_make_hash_table(SCHEME_hash_string); MZ_REGISTER_STATIC(default_sym); @@ -2734,6 +2731,14 @@ void scheme_init_foreign(Scheme_Env *env) fail_ok_sym = scheme_intern_symbol("fail-ok"); MZ_REGISTER_STATIC(abs_sym); abs_sym = scheme_intern_symbol("abs"); +} + +void scheme_init_foreign(Scheme_Env *env) +{ + Scheme_Env *menv; + ctype_struct *t; + Scheme_Object *s; + menv = scheme_primitive_module(scheme_intern_symbol("#%foreign"), env); scheme_add_global("ffi-lib?", scheme_make_prim_w_arity(foreign_ffi_lib_p, "ffi-lib?", 1, 1), menv); scheme_add_global("ffi-lib", diff --git a/src/mzscheme/src/env.c b/src/mzscheme/src/env.c index b2d7e3a9f0..73c1d63028 100644 --- a/src/mzscheme/src/env.c +++ b/src/mzscheme/src/env.c @@ -333,6 +333,9 @@ Scheme_Env *scheme_engine_instance_init() { scheme_init_symbol_table(); scheme_init_module_path_table(); scheme_init_type(); +#ifndef DONT_USE_FOREIGN + scheme_init_foreign_globals(); +#endif #if defined(MZ_PRECISE_GC) && defined(MZ_USE_PLACES) GC_switch_out_master_gc(); diff --git a/src/mzscheme/src/schpriv.h b/src/mzscheme/src/schpriv.h index 101f851490..64bcc9e680 100644 --- a/src/mzscheme/src/schpriv.h +++ b/src/mzscheme/src/schpriv.h @@ -214,6 +214,7 @@ void scheme_init_parameterization(Scheme_Env *env); void scheme_init_getenv(void); #ifndef DONT_USE_FOREIGN +void scheme_init_foreign_globals(); void scheme_init_foreign(Scheme_Env *env); #endif void scheme_init_place(Scheme_Env *env);