From: Ondřej Surý Date: Tue, 18 Jun 2024 13:21:52 +0000 (+0200) Subject: Fix PTHREAD_MUTEX_ADAPTIVE_NP and PTHREAD_MUTEX_ERRORCHECK_NP usage X-Git-Tag: alessio/regression/026024a6ae~3^2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=cc4f99bc6d6c82ed869caef1bccbb02821f9919d;p=thirdparty%2Fbind9.git Fix PTHREAD_MUTEX_ADAPTIVE_NP and PTHREAD_MUTEX_ERRORCHECK_NP usage The PTHREAD_MUTEX_ADAPTIVE_NP and PTHREAD_MUTEX_ERRORCHECK_NP are usually not defines, but enum values, so simple preprocessor check doesn't work. Check for PTHREAD_MUTEX_ADAPTIVE_NP from the autoconf AS_COMPILE_IFELSE block and define HAVE_PTHREAD_MUTEX_ADAPTIVE_NP. This should enable adaptive mutex on Linux and FreeBSD. As PTHREAD_MUTEX_ERRORCHECK actually comes from POSIX and Linux glibc does define it when compatibility macros are being set, we can just use PTHREAD_MUTEX_ERRORCHECK instead of PTHREAD_MUTEX_ERRORCHECK_NP. --- diff --git a/configure.ac b/configure.ac index 21404e6fcfc..2de7d76f77b 100644 --- a/configure.ac +++ b/configure.ac @@ -553,6 +553,14 @@ LIBS="$PTHREAD_LIBS $LIBS" CFLAGS="$CFLAGS $PTHREAD_CFLAGS" CC="$PTHREAD_CC" +AC_MSG_CHECKING([for PTHREAD_MUTEX_ADAPTIVE_NP]) +AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM([[#include ]], + [[(void)pthread_mutexattr_settype(&(pthread_mutexattr_t){ NULL }, PTHREAD_MUTEX_ADAPTIVE_NP);]])], + [AC_MSG_RESULT([yes]) + AC_DEFINE([HAVE_PTHREAD_MUTEX_ADAPTIVE_NP], [1], [Define to 1 if PTHREAD_MUTEX_ADAPTIVE_NP is available])], + [AC_MSG_RESULT([no])]) + AC_CHECK_FUNCS([pthread_attr_getstacksize pthread_attr_setstacksize pthread_barrier_init pthread_spin_init]) AC_CHECK_HEADERS([sched.h]) diff --git a/lib/isc/mutex.c b/lib/isc/mutex.c index 67815eb7e9b..e31ba1339cc 100644 --- a/lib/isc/mutex.c +++ b/lib/isc/mutex.c @@ -33,15 +33,14 @@ static isc_once_t init_once = ISC_ONCE_INIT; static void mutex_initialize(void) { RUNTIME_CHECK(pthread_mutexattr_init(&isc__mutex_init_attr) == 0); -#if ISC_MUTEX_ERROR_CHECK && defined(PTHREAD_MUTEX_ERRORCHECK_NP) +#if ISC_MUTEX_ERROR_CHECK RUNTIME_CHECK(pthread_mutexattr_settype(&isc__mutex_init_attr, - PTHREAD_MUTEX_ERRORCHECK_NP) == - 0); -#elif defined(PTHREAD_MUTEX_ADAPTIVE_NP) + PTHREAD_MUTEX_ERRORCHECK) == 0); +#elif HAVE_PTHREAD_MUTEX_ADAPTIVE_NP RUNTIME_CHECK(pthread_mutexattr_settype(&isc__mutex_init_attr, PTHREAD_MUTEX_ADAPTIVE_NP) == 0); -#endif /* HAVE_PTHREAD_MUTEX_ADAPTIVE_NP */ +#endif } void