diff --git a/src/aclocal.m4 b/src/aclocal.m4 index 2184cafc4..a3a249de1 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' @@ -288,7 +289,7 @@ case "${host_os}" in dnl disable floating point exceptions because they dnl lead to segfaults with the android libc with_fpe='no' - 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' @@ -303,7 +304,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}" @@ -317,7 +318,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}" @@ -330,7 +331,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}" @@ -380,8 +381,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" @@ -412,7 +411,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}" @@ -434,7 +433,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}" @@ -463,7 +462,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 @@ -501,7 +500,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\"' @@ -509,7 +508,6 @@ case "${host_os}" in ;; haiku*) thehost='haiku' - THREAD_LIBS='' SHARED_LDFLAGS="-shared ${LDFLAGS}" BUNDLE_LDFLAGS="-shared ${LDFLAGS}" ECL_LDRPATH="-Wl,--rpath,~A" @@ -538,7 +536,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}" @@ -550,7 +548,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 1e1c847ba..aded812fa 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,8 +6112,8 @@ SONAME_LDFLAGS='' case "${host_os}" in linux-android*) thehost='ANDROID' - with_fpe='no' - THREAD_CFLAGS='-D_THREAD_SAFE' + with_fpe='no' + THREAD_CFLAGS="-D_THREAD_SAFE ${THREAD_CFLAGS}" SHARED_LDFLAGS="-shared ${LDFLAGS}" BUNDLE_LDFLAGS="-shared ${LDFLAGS}" ECL_LDRPATH='-Wl,--rpath,~A' @@ -6131,7 +6132,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}" @@ -6147,7 +6148,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}" @@ -6162,7 +6163,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}" @@ -6228,8 +6229,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" @@ -6266,7 +6265,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}" @@ -6291,7 +6290,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}" @@ -6433,7 +6432,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 @@ -6477,7 +6476,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\"' @@ -6485,7 +6484,6 @@ LSP_FEATURES="${LSP_FEATURES} :unix" ;; haiku*) thehost='haiku' - THREAD_LIBS='' SHARED_LDFLAGS="-shared ${LDFLAGS}" BUNDLE_LDFLAGS="-shared ${LDFLAGS}" ECL_LDRPATH="-Wl,--rpath,~A" @@ -6518,7 +6516,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}" @@ -6532,7 +6530,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}" @@ -7217,7 +7215,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 */