]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
Fix PTHREAD_MUTEX_ADAPTIVE_NP and PTHREAD_MUTEX_ERRORCHECK_NP usage
authorOndřej Surý <ondrej@isc.org>
Tue, 18 Jun 2024 13:21:52 +0000 (15:21 +0200)
committerOndřej Surý <ondrej@isc.org>
Mon, 5 Aug 2024 07:31:39 +0000 (07:31 +0000)
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
lib/isc/mutex.c

index 21404e6fcfc484774b3e869247ffef5bb0dc0b50..2de7d76f77bb3c058e5a42c4116fd3d12afdc51c 100644 (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])
index 67815eb7e9b55cf4d89c47da2fc210c5da301473..e31ba1339cc7ae40c5362aa6c2e796047d4e5213 100644 (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