From c33bf0de8d159d9d85505c9c176067082306257f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Sur=C3=BD?= Date: Tue, 18 Jun 2024 14:49:37 +0200 Subject: [PATCH 1/3] Remove defunct --with-locktype configure option The --with-locktype configure option was no-op, so it was removed. --- configure.ac | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/configure.ac b/configure.ac index f96d2d5421..21404e6fcf 100644 --- a/configure.ac +++ b/configure.ac @@ -555,13 +555,6 @@ CC="$PTHREAD_CC" AC_CHECK_FUNCS([pthread_attr_getstacksize pthread_attr_setstacksize pthread_barrier_init pthread_spin_init]) -# [pairwise: --with-locktype=adaptive, --with-locktype=standard] -AC_ARG_WITH([locktype], - AS_HELP_STRING([--with-locktype=ARG], - [Specify mutex lock type - (adaptive or standard)]), - [], [with_locktype="adaptive"]) - AC_CHECK_HEADERS([sched.h]) AC_SEARCH_LIBS([sched_yield],[rt]) @@ -1712,9 +1705,6 @@ report() { if test "yes" = "$enable_full_report" -o "rbt" = "$zonedb"; then echo " Default cache database type: $cachedb" fi - if test "yes" = "$enable_full_report" -o "standard" = "$with_locktype"; then - echo " Mutex lock type: $with_locktype" - fi test "no" = "$enable_dnstap" || \ echo " Allow 'dnstap' packet logging (--enable-dnstap)" test -z "$MAXMINDDB_LIBS" || echo " GeoIP2 access control (--enable-geoip)" From f158884344b6769028b802a549ef1b8c03758fff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Sur=C3=BD?= Date: Tue, 18 Jun 2024 15:21:10 +0200 Subject: [PATCH 2/3] Remove ISC_MUTEX_INITIALIZER It's hard to get it right on different platforms and it's unused in BIND 9 anyway. --- lib/isc/include/isc/mutex.h | 8 -------- 1 file changed, 8 deletions(-) diff --git a/lib/isc/include/isc/mutex.h b/lib/isc/include/isc/mutex.h index 341148a753..df24922336 100644 --- a/lib/isc/include/isc/mutex.h +++ b/lib/isc/include/isc/mutex.h @@ -23,14 +23,6 @@ #include /* for ISC_R_ codes */ #include -#if ISC_MUTEX_ERROR_CHECK && defined(PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP) -#define ISC_MUTEX_INITIALIZER PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP -#elif defined(PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP) -#define ISC_MUTEX_INITIALIZER PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP -#else -#define ISC_MUTEX_INITIALIZER PTHREAD_MUTEX_INITIALIZER -#endif - ISC_LANG_BEGINDECLS /* From cc4f99bc6d6c82ed869caef1bccbb02821f9919d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Sur=C3=BD?= Date: Tue, 18 Jun 2024 15:21:52 +0200 Subject: [PATCH 3/3] 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. --- configure.ac | 8 ++++++++ lib/isc/mutex.c | 9 ++++----- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/configure.ac b/configure.ac index 21404e6fcf..2de7d76f77 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 67815eb7e9..e31ba1339c 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