From: Ondřej Surý Date: Mon, 5 Feb 2024 08:03:41 +0000 (+0100) Subject: Use error checking mutex in developer mode on Linux X-Git-Tag: v9.19.22~56^2 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=2c98ccbdbac1202a3bf719e34c11e0eb04bb931d;p=thirdparty%2Fbind9.git Use error checking mutex in developer mode on Linux When developer mode is enabled, use error checking mutex type, so we can discover wrong use of mutexes faster. --- diff --git a/configure.ac b/configure.ac index cd05a39e3d5..a27b22543c2 100644 --- a/configure.ac +++ b/configure.ac @@ -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 diff --git a/lib/isc/include/isc/mutex.h b/lib/isc/include/isc/mutex.h index 904747e335d..341148a7532 100644 --- a/lib/isc/include/isc/mutex.h +++ b/lib/isc/include/isc/mutex.h @@ -23,7 +23,9 @@ #include /* for ISC_R_ codes */ #include -#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 diff --git a/lib/isc/mutex.c b/lib/isc/mutex.c index ff9053793da..67815eb7e9b 100644 --- a/lib/isc/mutex.c +++ b/lib/isc/mutex.c @@ -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);