2
0
mirror of https://gitlab.isc.org/isc-projects/bind9 synced 2025-08-23 10:39:16 +00:00

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.
This commit is contained in:
Ondřej Surý 2024-06-18 15:21:52 +02:00
parent f158884344
commit cc4f99bc6d
2 changed files with 12 additions and 5 deletions

View File

@ -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 <pthread.h>]],
[[(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])

View File

@ -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