Fix new pthread code to respect --disable-thread-safety.

Don't try to compile src/port/pthread_barrier_wait.c if we opted out of
threads at configure time.  Revealed by build farm member gaur, which
can't compile this code because of problems with its pthread
implementation.  It shouldn't be trying to, because it's using
--disable-thread-safety.

Defect in commit 44bf3d50.

Reported-by: Tom Lane <tgl@sss.pgh.pa.us>
Discussion: https://postgr.es/m/2568537.1615603606%40sss.pgh.pa.us
This commit is contained in:
Thomas Munro 2021-03-13 17:21:01 +13:00
parent c5be48f092
commit de91c3b976
2 changed files with 84 additions and 71 deletions

145
configure vendored
View File

@ -11635,62 +11635,6 @@ if test "$ac_res" != no; then :
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing pthread_barrier_wait" >&5
$as_echo_n "checking for library containing pthread_barrier_wait... " >&6; }
if ${ac_cv_search_pthread_barrier_wait+:} false; then :
$as_echo_n "(cached) " >&6
else
ac_func_search_save_LIBS=$LIBS
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
/* Override any GCC internal prototype to avoid an error.
Use char because int might match the return type of a GCC
builtin and then its argument prototype would still apply. */
#ifdef __cplusplus
extern "C"
#endif
char pthread_barrier_wait ();
int
main ()
{
return pthread_barrier_wait ();
;
return 0;
}
_ACEOF
for ac_lib in '' pthread; do
if test -z "$ac_lib"; then
ac_res="none required"
else
ac_res=-l$ac_lib
LIBS="-l$ac_lib $ac_func_search_save_LIBS"
fi
if ac_fn_c_try_link "$LINENO"; then :
ac_cv_search_pthread_barrier_wait=$ac_res
fi
rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext
if ${ac_cv_search_pthread_barrier_wait+:} false; then :
break
fi
done
if ${ac_cv_search_pthread_barrier_wait+:} false; then :
else
ac_cv_search_pthread_barrier_wait=no
fi
rm conftest.$ac_ext
LIBS=$ac_func_search_save_LIBS
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_pthread_barrier_wait" >&5
$as_echo "$ac_cv_search_pthread_barrier_wait" >&6; }
ac_res=$ac_cv_search_pthread_barrier_wait
if test "$ac_res" != no; then :
test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
fi
# Solaris:
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing fdatasync" >&5
$as_echo_n "checking for library containing fdatasync... " >&6; }
@ -11978,6 +11922,65 @@ if test "$ac_res" != no; then :
fi
if test "$enable_thread_safety" = yes; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing pthread_barrier_wait" >&5
$as_echo_n "checking for library containing pthread_barrier_wait... " >&6; }
if ${ac_cv_search_pthread_barrier_wait+:} false; then :
$as_echo_n "(cached) " >&6
else
ac_func_search_save_LIBS=$LIBS
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
/* Override any GCC internal prototype to avoid an error.
Use char because int might match the return type of a GCC
builtin and then its argument prototype would still apply. */
#ifdef __cplusplus
extern "C"
#endif
char pthread_barrier_wait ();
int
main ()
{
return pthread_barrier_wait ();
;
return 0;
}
_ACEOF
for ac_lib in '' pthread; do
if test -z "$ac_lib"; then
ac_res="none required"
else
ac_res=-l$ac_lib
LIBS="-l$ac_lib $ac_func_search_save_LIBS"
fi
if ac_fn_c_try_link "$LINENO"; then :
ac_cv_search_pthread_barrier_wait=$ac_res
fi
rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext
if ${ac_cv_search_pthread_barrier_wait+:} false; then :
break
fi
done
if ${ac_cv_search_pthread_barrier_wait+:} false; then :
else
ac_cv_search_pthread_barrier_wait=no
fi
rm conftest.$ac_ext
LIBS=$ac_func_search_save_LIBS
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_pthread_barrier_wait" >&5
$as_echo "$ac_cv_search_pthread_barrier_wait" >&6; }
ac_res=$ac_cv_search_pthread_barrier_wait
if test "$ac_res" != no; then :
test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
fi
fi
if test "$with_readline" = yes; then
@ -15939,19 +15942,6 @@ esac
fi
ac_fn_c_check_func "$LINENO" "pthread_barrier_wait" "ac_cv_func_pthread_barrier_wait"
if test "x$ac_cv_func_pthread_barrier_wait" = xyes; then :
$as_echo "#define HAVE_PTHREAD_BARRIER_WAIT 1" >>confdefs.h
else
case " $LIBOBJS " in
*" pthread_barrier_wait.$ac_objext "* ) ;;
*) LIBOBJS="$LIBOBJS pthread_barrier_wait.$ac_objext"
;;
esac
fi
ac_fn_c_check_func "$LINENO" "pwrite" "ac_cv_func_pwrite"
if test "x$ac_cv_func_pwrite" = xyes; then :
$as_echo "#define HAVE_PWRITE 1" >>confdefs.h
@ -16058,6 +16048,23 @@ fi
if test "$enable_thread_safety" = yes; then
ac_fn_c_check_func "$LINENO" "pthread_barrier_wait" "ac_cv_func_pthread_barrier_wait"
if test "x$ac_cv_func_pthread_barrier_wait" = xyes; then :
$as_echo "#define HAVE_PTHREAD_BARRIER_WAIT 1" >>confdefs.h
else
case " $LIBOBJS " in
*" pthread_barrier_wait.$ac_objext "* ) ;;
*) LIBOBJS="$LIBOBJS pthread_barrier_wait.$ac_objext"
;;
esac
fi
fi
if test "$PORTNAME" = "win32" -o "$PORTNAME" = "cygwin"; then
# Cygwin and (apparently, based on test results) Mingw both
# have a broken strtof(), so substitute the same replacement

View File

@ -1143,7 +1143,6 @@ AC_SEARCH_LIBS(getopt_long, [getopt gnugetopt])
AC_SEARCH_LIBS(shm_open, rt)
AC_SEARCH_LIBS(shm_unlink, rt)
AC_SEARCH_LIBS(clock_gettime, [rt posix4])
AC_SEARCH_LIBS(pthread_barrier_wait, pthread)
# Solaris:
AC_SEARCH_LIBS(fdatasync, [rt posix4])
# Required for thread_test.c on Solaris
@ -1156,6 +1155,10 @@ AC_SEARCH_LIBS(shmget, cygipc)
# *BSD:
AC_SEARCH_LIBS(backtrace_symbols, execinfo)
if test "$enable_thread_safety" = yes; then
AC_SEARCH_LIBS(pthread_barrier_wait, pthread)
fi
if test "$with_readline" = yes; then
PGAC_CHECK_READLINE
if test x"$pgac_cv_check_readline" = x"no"; then
@ -1744,7 +1747,6 @@ AC_REPLACE_FUNCS(m4_normalize([
mkdtemp
pread
preadv
pthread_barrier_wait
pwrite
pwritev
random
@ -1755,6 +1757,10 @@ AC_REPLACE_FUNCS(m4_normalize([
strtof
]))
if test "$enable_thread_safety" = yes; then
AC_REPLACE_FUNCS(pthread_barrier_wait)
fi
if test "$PORTNAME" = "win32" -o "$PORTNAME" = "cygwin"; then
# Cygwin and (apparently, based on test results) Mingw both
# have a broken strtof(), so substitute the same replacement