diff --git a/src/aclocal.m4 b/src/aclocal.m4 index 2b9bee8cd..3e6f08a8f 100644 --- a/src/aclocal.m4 +++ b/src/aclocal.m4 @@ -274,9 +274,10 @@ SHAREDPREFIX='lib' LIBPREFIX='lib' LIBEXT='a' PICFLAG='-fPIC' -THREAD_CFLAGS='' +THREAD_CFLAGS='-DGC_NO_THREAD_REDIRECTS' THREAD_LIBS='' THREAD_GC_FLAGS='--enable-threads=posix' +CFLAGS='' INSTALL_TARGET='install' THREAD_OBJ="$THREAD_OBJ threads/thread threads/mutex threads/condition_variable threads/semaphore threads/barrier threads/mailbox threads/rwlock" clibs='-lm' @@ -285,7 +286,7 @@ SONAME_LDFLAGS='' case "${host_os}" in linux-android*) thehost='ANDROID' - THREAD_CFLAGS='-D_THREAD_SAFE' + THREAD_CFLAGS="-D_THREAD_SAFE ${THREAD_CFLAGS}" SHARED_LDFLAGS="-shared ${LDFLAGS}" BUNDLE_LDFLAGS="-shared ${LDFLAGS}" ECL_LDRPATH='-Wl,--rpath,~A' @@ -300,7 +301,7 @@ case "${host_os}" in # libdir may have a dollar expression inside linux*) thehost='linux' - THREAD_CFLAGS='-D_THREAD_SAFE' + THREAD_CFLAGS="-D_THREAD_SAFE ${THREAD_CFLAGS}" THREAD_LIBS='-lpthread' SHARED_LDFLAGS="-shared ${LDFLAGS}" BUNDLE_LDFLAGS="-shared ${LDFLAGS}" @@ -314,7 +315,7 @@ case "${host_os}" in ;; gnu*) thehost='gnu' - THREAD_CFLAGS='-D_THREAD_SAFE' + THREAD_CFLAGS="-D_THREAD_SAFE ${THREAD_CFLAGS}" THREAD_LIBS='-lpthread' SHARED_LDFLAGS="-shared ${LDFLAGS}" BUNDLE_LDFLAGS="-shared ${LDFLAGS}" @@ -327,7 +328,7 @@ case "${host_os}" in ;; kfreebsd*-gnu) thehost='kfreebsd' - THREAD_CFLAGS='-D_THREAD_SAFE' + THREAD_CFLAGS="-D_THREAD_SAFE ${THREAD_CFLAGS}" THREAD_LIBS='-lpthread' SHARED_LDFLAGS="-shared ${LDFLAGS}" BUNDLE_LDFLAGS="-shared ${LDFLAGS}" @@ -377,8 +378,6 @@ case "${host_os}" in ;; openbsd*) thehost='openbsd' - THREAD_CFLAGS='' - THREAD_LIBS='' SHARED_LDFLAGS="-shared ${LDFLAGS}" BUNDLE_LDFLAGS="-shared ${LDFLAGS}" ECL_LDRPATH="-Wl,--rpath,~A" @@ -409,7 +408,7 @@ case "${host_os}" in thehost='cygwin' #enable_threads='no' shared='yes' - THREAD_CFLAGS='-D_THREAD_SAFE' + THREAD_CFLAGS="-D_THREAD_SAFE ${THREAD_CFLAGS}" THREAD_LIBS='-lpthread' SHARED_LDFLAGS="-shared ${LDFLAGS}" BUNDLE_LDFLAGS="-shared ${LDFLAGS}" @@ -431,7 +430,7 @@ case "${host_os}" in clibs='' shared='yes' enable_threads='yes' - THREAD_CFLAGS='-D_THREAD_SAFE' + THREAD_CFLAGS="-D_THREAD_SAFE ${THREAD_CFLAGS}" THREAD_GC_FLAGS='--enable-threads=win32' SHARED_LDFLAGS="-Wl,--stack,${ECL_DEFAULT_C_STACK_SIZE}" BUNDLE_LDFLAGS="-Wl,--stack,${ECL_DEFAULT_C_STACK_SIZE}" @@ -460,7 +459,7 @@ case "${host_os}" in SHARED_LDFLAGS="-dynamiclib ${LDFLAGS}" BUNDLE_LDFLAGS="-bundle ${LDFLAGS}" ECL_LDRPATH='-Wl,-rpath,~A' - THREAD_CFLAGS='-D_THREAD_SAFE' + THREAD_CFLAGS="-D_THREAD_SAFE ${THREAD_CFLAGS}" THREAD_LIBS='-lpthread' # The GMP library has not yet been ported to Intel or Arm-OSX case "`uname -m`" in @@ -498,7 +497,7 @@ case "${host_os}" in thehost='nonstop' shared='yes' PICFLAG='-call_shared' - THREAD_CFLAGS='-spthread' + THREAD_CFLAGS="-spthread ${THREAD_CFLAGS}" SHARED_LDFLAGS="-shared ${LDFLAGS}" BUNDLE_LDFLAGS="-shared ${LDFLAGS}" ECL_LDRPATH='-Wld=\"-rld_l ~A\"' @@ -506,7 +505,6 @@ case "${host_os}" in ;; haiku*) thehost='haiku' - THREAD_LIBS='' SHARED_LDFLAGS="-shared ${LDFLAGS}" BUNDLE_LDFLAGS="-shared ${LDFLAGS}" ECL_LDRPATH="-Wl,--rpath,~A" @@ -535,7 +533,7 @@ esac case "${host}" in *-nacl) thehost='linux' - THREAD_CFLAGS='-D_THREAD_SAFE' + THREAD_CFLAGS="-D_THREAD_SAFE ${THREAD_CFLAGS}" THREAD_LIBS='-lpthread' SHARED_LDFLAGS="-shared ${LDFLAGS}" BUNDLE_LDFLAGS="-shared ${LDFLAGS}" @@ -547,7 +545,7 @@ case "${host}" in ;; *-pnacl) thehost='linux' - THREAD_CFLAGS='-D_THREAD_SAFE' + THREAD_CFLAGS="-D_THREAD_SAFE ${THREAD_CFLAGS}" THREAD_LIBS='-lpthread' dnl SHARED_LDFLAGS="-shared ${LDFLAGS}" dnl BUNDLE_LDFLAGS="-shared ${LDFLAGS}" diff --git a/src/c/mem_bdwgc.d b/src/c/mem_bdwgc.d index 84acb9cad..bbd62eafb 100644 --- a/src/c/mem_bdwgc.d +++ b/src/c/mem_bdwgc.d @@ -1308,6 +1308,24 @@ init_cpu(cl_env_ptr the_env) struct GC_stack_base stack; GC_get_stack_base(&stack); the_env->c_stack.org = (char*)stack.mem_base; +# ifdef ECL_THREADS + if (GC_thread_is_registered() == 0) { + GC_register_my_thread(&stack); + } +# endif +#endif + return ECL_NIL; +} + +static cl_object +free_cpu(cl_env_ptr the_env) +{ +#ifdef GBC_BOEHM +# ifdef ECL_THREADS + if (GC_thread_is_registered() == 1) { + GC_unregister_my_thread(); + } +# endif #endif return ECL_NIL; } @@ -1320,7 +1338,7 @@ static struct ecl_module module_gc = { .enable = enable_gc, .init_env = ecl_module_no_op_env, .init_cpu = init_cpu, - .free_cpu = ecl_module_no_op_cpu, + .free_cpu = free_cpu, .free_env = ecl_module_no_op_env, .disable = disable_gc, .destroy = ecl_module_no_op diff --git a/src/c/process.d b/src/c/process.d index 701fed10a..67eb4761c 100644 --- a/src/c/process.d +++ b/src/c/process.d @@ -123,28 +123,6 @@ init_tl_bindings(cl_object process, cl_env_ptr env) #ifdef ECL_THREADS -static void -register_gc_thread() -{ -#ifdef GBC_BOEHM - if (GC_thread_is_registered() == 0) { - struct GC_stack_base stack; - GC_get_stack_base(&stack); - GC_register_my_thread(&stack); - } -#endif -} - -static void -unregister_gc_thread() -{ -#ifdef GBC_BOEHM - if (GC_thread_is_registered() == 1) { - GC_unregister_my_thread(); - } -#endif -} - /* Run a process in the current system thread. */ cl_env_ptr ecl_adopt_cpu() @@ -153,7 +131,6 @@ ecl_adopt_cpu() ecl_thread_t current; if (the_env != NULL) return the_env; - register_gc_thread(); ecl_set_process_self(current); the_env = _ecl_alloc_env(0); the_env->thread = current; @@ -177,7 +154,6 @@ ecl_disown_cpu() #endif ecl_modules_free_env(the_env); _ecl_dealloc_env(the_env); - unregister_gc_thread(); } #ifdef ECL_WINDOWS_THREADS diff --git a/src/configure b/src/configure index af80a9916..ed5309951 100755 --- a/src/configure +++ b/src/configure @@ -6100,9 +6100,10 @@ SHAREDPREFIX='lib' LIBPREFIX='lib' LIBEXT='a' PICFLAG='-fPIC' -THREAD_CFLAGS='' +THREAD_CFLAGS='-DGC_NO_THREAD_REDIRECTS' THREAD_LIBS='' THREAD_GC_FLAGS='--enable-threads=posix' +CFLAGS='' INSTALL_TARGET='install' THREAD_OBJ="$THREAD_OBJ threads/thread threads/mutex threads/condition_variable threads/semaphore threads/barrier threads/mailbox threads/rwlock" clibs='-lm' @@ -6111,7 +6112,7 @@ SONAME_LDFLAGS='' case "${host_os}" in linux-android*) thehost='ANDROID' - THREAD_CFLAGS='-D_THREAD_SAFE' + THREAD_CFLAGS="-D_THREAD_SAFE ${THREAD_CFLAGS}" SHARED_LDFLAGS="-shared ${LDFLAGS}" BUNDLE_LDFLAGS="-shared ${LDFLAGS}" ECL_LDRPATH='-Wl,--rpath,~A' @@ -6130,7 +6131,7 @@ LSP_FEATURES="${LSP_FEATURES} :unix" # libdir may have a dollar expression inside linux*) thehost='linux' - THREAD_CFLAGS='-D_THREAD_SAFE' + THREAD_CFLAGS="-D_THREAD_SAFE ${THREAD_CFLAGS}" THREAD_LIBS='-lpthread' SHARED_LDFLAGS="-shared ${LDFLAGS}" BUNDLE_LDFLAGS="-shared ${LDFLAGS}" @@ -6146,7 +6147,7 @@ LSP_FEATURES="${LSP_FEATURES} :unix" ;; gnu*) thehost='gnu' - THREAD_CFLAGS='-D_THREAD_SAFE' + THREAD_CFLAGS="-D_THREAD_SAFE ${THREAD_CFLAGS}" THREAD_LIBS='-lpthread' SHARED_LDFLAGS="-shared ${LDFLAGS}" BUNDLE_LDFLAGS="-shared ${LDFLAGS}" @@ -6161,7 +6162,7 @@ LSP_FEATURES="${LSP_FEATURES} :unix" ;; kfreebsd*-gnu) thehost='kfreebsd' - THREAD_CFLAGS='-D_THREAD_SAFE' + THREAD_CFLAGS="-D_THREAD_SAFE ${THREAD_CFLAGS}" THREAD_LIBS='-lpthread' SHARED_LDFLAGS="-shared ${LDFLAGS}" BUNDLE_LDFLAGS="-shared ${LDFLAGS}" @@ -6227,8 +6228,6 @@ LSP_FEATURES="${LSP_FEATURES} :bsd" ;; openbsd*) thehost='openbsd' - THREAD_CFLAGS='' - THREAD_LIBS='' SHARED_LDFLAGS="-shared ${LDFLAGS}" BUNDLE_LDFLAGS="-shared ${LDFLAGS}" ECL_LDRPATH="-Wl,--rpath,~A" @@ -6265,7 +6264,7 @@ LSP_FEATURES="${LSP_FEATURES} :unix" thehost='cygwin' #enable_threads='no' shared='yes' - THREAD_CFLAGS='-D_THREAD_SAFE' + THREAD_CFLAGS="-D_THREAD_SAFE ${THREAD_CFLAGS}" THREAD_LIBS='-lpthread' SHARED_LDFLAGS="-shared ${LDFLAGS}" BUNDLE_LDFLAGS="-shared ${LDFLAGS}" @@ -6290,7 +6289,7 @@ LSP_FEATURES="${LSP_FEATURES} :unix" clibs='' shared='yes' enable_threads='yes' - THREAD_CFLAGS='-D_THREAD_SAFE' + THREAD_CFLAGS="-D_THREAD_SAFE ${THREAD_CFLAGS}" THREAD_GC_FLAGS='--enable-threads=win32' SHARED_LDFLAGS="-Wl,--stack,${ECL_DEFAULT_C_STACK_SIZE}" BUNDLE_LDFLAGS="-Wl,--stack,${ECL_DEFAULT_C_STACK_SIZE}" @@ -6432,7 +6431,7 @@ fi SHARED_LDFLAGS="-dynamiclib ${LDFLAGS}" BUNDLE_LDFLAGS="-bundle ${LDFLAGS}" ECL_LDRPATH='-Wl,-rpath,~A' - THREAD_CFLAGS='-D_THREAD_SAFE' + THREAD_CFLAGS="-D_THREAD_SAFE ${THREAD_CFLAGS}" THREAD_LIBS='-lpthread' # The GMP library has not yet been ported to Intel or Arm-OSX case "`uname -m`" in @@ -6476,7 +6475,7 @@ LSP_FEATURES="${LSP_FEATURES} :unix" thehost='nonstop' shared='yes' PICFLAG='-call_shared' - THREAD_CFLAGS='-spthread' + THREAD_CFLAGS="-spthread ${THREAD_CFLAGS}" SHARED_LDFLAGS="-shared ${LDFLAGS}" BUNDLE_LDFLAGS="-shared ${LDFLAGS}" ECL_LDRPATH='-Wld=\"-rld_l ~A\"' @@ -6484,7 +6483,6 @@ LSP_FEATURES="${LSP_FEATURES} :unix" ;; haiku*) thehost='haiku' - THREAD_LIBS='' SHARED_LDFLAGS="-shared ${LDFLAGS}" BUNDLE_LDFLAGS="-shared ${LDFLAGS}" ECL_LDRPATH="-Wl,--rpath,~A" @@ -6517,7 +6515,7 @@ esac case "${host}" in *-nacl) thehost='linux' - THREAD_CFLAGS='-D_THREAD_SAFE' + THREAD_CFLAGS="-D_THREAD_SAFE ${THREAD_CFLAGS}" THREAD_LIBS='-lpthread' SHARED_LDFLAGS="-shared ${LDFLAGS}" BUNDLE_LDFLAGS="-shared ${LDFLAGS}" @@ -6531,7 +6529,7 @@ LSP_FEATURES="${LSP_FEATURES} :nacl" ;; *-pnacl) thehost='linux' - THREAD_CFLAGS='-D_THREAD_SAFE' + THREAD_CFLAGS="-D_THREAD_SAFE ${THREAD_CFLAGS}" THREAD_LIBS='-lpthread' CFLAGS="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 ${CFLAGS}" @@ -7216,7 +7214,7 @@ if test "${enable_threads}" = "yes" ; then as_fn_error $? "Threads aren't supported on this system." "$LINENO" 5 else LIBS="${THREAD_LIBS} ${LIBS}" - CFLAGS="${CFLAGS} ${THREAD_CFLAGS}" + CFLAGS="${CFLAGS} ${THREAD_CFLAGS} -DGC_NO_THREAD_REDIRECTS" ac_fn_c_check_func "$LINENO" "pthread_rwlock_init" "ac_cv_func_pthread_rwlock_init" if test "x$ac_cv_func_pthread_rwlock_init" = xyes diff --git a/src/h/ecl.h b/src/h/ecl.h index 80214bf5a..1fa4363df 100644 --- a/src/h/ecl.h +++ b/src/h/ecl.h @@ -63,9 +63,6 @@ # endif # ifdef ECL_THREADS # undef ERROR -# ifdef GBC_BOEHM -# define CreateThread GC_CreateThread -# endif # else # error "The Windows ports cannot be built without threads." # endif /* ECL_THREADS */