]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
Use error checking mutex in developer mode on Linux
authorOndřej Surý <ondrej@isc.org>
Mon, 5 Feb 2024 08:03:41 +0000 (09:03 +0100)
committerOndřej Surý <ondrej@isc.org>
Wed, 7 Feb 2024 19:54:05 +0000 (20:54 +0100)
When developer mode is enabled, use error checking mutex type, so we can
discover wrong use of mutexes faster.

configure.ac
lib/isc/include/isc/mutex.h
lib/isc/mutex.c

index cd05a39e3d506c507cb0b4ffcddf165c581e114e..a27b22543c26669a4bc1d462aa3b3194c6325dfc 100644 (file)
@@ -171,7 +171,7 @@ AC_ARG_ENABLE([developer],
 
 AS_IF([test "$enable_developer" = "yes"],
       [DEVELOPER_MODE=yes
-       STD_CPPFLAGS="$STD_CPPFLAGS -DISC_MEM_DEFAULTFILL=1 -DISC_MEM_TRACKLINES=1 -DISC_LIST_CHECKINIT=1 -DISC_STATS_CHECKUNDERFLOW=1 -DDNS_RBTDB_STRONG_RWLOCK_CHECK=1"
+       STD_CPPFLAGS="$STD_CPPFLAGS -DISC_MEM_DEFAULTFILL=1 -DISC_MEM_TRACKLINES=1 -DISC_LIST_CHECKINIT=1 -DISC_STATS_CHECKUNDERFLOW=1 -DDNS_RBTDB_STRONG_RWLOCK_CHECK=1 -DISC_MUTEX_ERROR_CHECK=1"
        test "${enable_fixed_rrset+set}" = set || enable_fixed_rrset=yes
        test "${enable_querytrace+set}" = set || enable_querytrace=yes
        test "${with_cmocka+set}" = set || with_cmocka=yes
index 904747e335d217972dc63733380e3de439cd70ad..341148a75326835996646934fb4d6405758f8927 100644 (file)
@@ -23,7 +23,9 @@
 #include <isc/result.h> /* for ISC_R_ codes */
 #include <isc/util.h>
 
-#if defined(PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP)
+#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
index ff9053793dadc1477dcc98a2713e7c6133ccdbe1..67815eb7e9b55cf4d89c47da2fc210c5da301473 100644 (file)
@@ -33,7 +33,11 @@ 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 defined(PTHREAD_MUTEX_ADAPTIVE_NP)
+#if ISC_MUTEX_ERROR_CHECK && defined(PTHREAD_MUTEX_ERRORCHECK_NP)
+       RUNTIME_CHECK(pthread_mutexattr_settype(&isc__mutex_init_attr,
+                                               PTHREAD_MUTEX_ERRORCHECK_NP) ==
+                     0);
+#elif defined(PTHREAD_MUTEX_ADAPTIVE_NP)
        RUNTIME_CHECK(pthread_mutexattr_settype(&isc__mutex_init_attr,
                                                PTHREAD_MUTEX_ADAPTIVE_NP) ==
                      0);