From ac531a8aa8aff6776c0525fc25381d5d4a483753 Mon Sep 17 00:00:00 2001 From: nobu Date: Tue, 24 Jun 2008 08:20:42 +0000 Subject: * configure.in (rb_cv_fork_with_pthread): check after check for pthread library, and define the macro when checked only. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@17559 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- configure.in | 121 +++++++++++++++++++++++++++++++---------------------------- 1 file changed, 63 insertions(+), 58 deletions(-) (limited to 'configure.in') diff --git a/configure.in b/configure.in index da8518f440..2b43c6878f 100644 --- a/configure.in +++ b/configure.in @@ -766,64 +766,6 @@ AC_DEFINE_UNQUOTED([RUBY_SETJMP(env)], [${setjmp_prefix}setjmp(env${setjmp_sigma AC_DEFINE_UNQUOTED([RUBY_LONGJMP(env,val)], [${setjmp_prefix}longjmp(env,val)]) AC_DEFINE_UNQUOTED(RUBY_JMP_BUF, ${setjmp_sigmask+${setjmp_prefix}}jmp_buf) - -case $target_os in -*bsd*|darwin*) -AC_CACHE_CHECK([if fork works with pthread], rb_cv_fork_with_pthread, -[AC_TRY_RUN([ -#include -#include -#include -#include -#include -#include -#include - -void * -thread_func(void *dmy) -{ - return dmy; -} - -void *use_threads(void) -{ - pthread_t tid; - if (pthread_create(&tid, 0, thread_func, 0) != 0) { - exit(1); - } - if (pthread_join(tid, 0) != 0) { - exit(1); - } -} - -int -main(int argc, char *argv[]) -{ - pid_t pid; - use_threads(); - pid = fork(); - - if (pid) { - int loc; - sleep(1); - if (waitpid(pid, &loc, WNOHANG) == 0) { - kill(pid, SIGKILL); - return 1; - } - } - else { - use_threads(); - } - - return 0; -}] - rb_cv_fork_with_pthread=yes, - rb_cv_fork_with_pthread=no, - rb_cv_fork_with_pthread=yes)]) - ;; -esac -test x$rb_cv_fork_with_pthread = xyes || AC_DEFINE(CANNOT_FORK_WITH_PTHREAD) - AC_ARG_ENABLE(setreuid, [ --enable-setreuid use setreuid()/setregid() according to need even if obsolete.], [use_setreuid=$enableval]) @@ -1161,6 +1103,69 @@ if test x"$ac_cv_header_ucontext_h" = xyes; then fi fi +if test "$ac_cv_func_fork" = "yes" -a "$rb_with_pthread" = "yes"; then + AC_CACHE_CHECK([if fork works with pthread], rb_cv_fork_with_pthread, + [AC_TRY_RUN([ +#include +#include +#include +#include +#include +#include +#include +#ifndef EXIT_SUCCESS +#define EXIT_SUCCESS 0 +#endif +#ifndef EXIT_FAILURE +#define EXIT_FAILURE 1 +#endif + +void * +thread_func(void *dmy) +{ + return dmy; +} + +int +use_threads(void) +{ + pthread_t tid; + if (pthread_create(&tid, 0, thread_func, 0) != 0) { + return -1; + } + if (pthread_join(tid, 0) != 0) { + return -1; + } + return 0; +} + +int +main(int argc, char *argv[]) +{ + pid_t pid; + if (use_threads()) return EXIT_FAILURE; + pid = fork(); + + if (pid) { + int loc; + sleep(1); + if (waitpid(pid, &loc, WNOHANG) == 0) { + kill(pid, SIGKILL); + return EXIT_FAILURE; + } + } + else { + if (use_threads()) return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +}] + rb_cv_fork_with_pthread=yes, + rb_cv_fork_with_pthread=no, + rb_cv_fork_with_pthread=yes)]) + test x$rb_cv_fork_with_pthread = xyes || AC_DEFINE(CANNOT_FORK_WITH_PTHREAD) +fi + AC_CHECK_FUNCS(backtrace) AC_ARG_WITH(valgrind, -- cgit v1.2.3