Merge branch 'ondrej/use-error-checking-mutex-on-linux' into 'main'
Always use adaptive mutexes on Linux and use error checking mutexes in developer mode See merge request isc-projects/bind9!8693
This commit is contained in:
26
configure.ac
26
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
|
||||
@@ -562,30 +562,6 @@ AC_ARG_WITH([locktype],
|
||||
(adaptive or standard)]),
|
||||
[], [with_locktype="adaptive"])
|
||||
|
||||
AS_CASE([$with_locktype],
|
||||
[adaptive],[
|
||||
AC_MSG_CHECKING([for PTHREAD_MUTEX_ADAPTIVE_NP])
|
||||
AC_COMPILE_IFELSE(
|
||||
[AC_LANG_PROGRAM(
|
||||
[[
|
||||
#ifndef _GNU_SOURCE
|
||||
#define _GNU_SOURCE
|
||||
#endif
|
||||
#include <pthread.h>
|
||||
]],
|
||||
[[
|
||||
return (PTHREAD_MUTEX_ADAPTIVE_NP);
|
||||
]]
|
||||
)],
|
||||
[AC_MSG_RESULT([using adaptive lock type])
|
||||
AC_DEFINE([HAVE_PTHREAD_MUTEX_ADAPTIVE_NP], 1,
|
||||
[Support for PTHREAD_MUTEX_ADAPTIVE_NP]) ],
|
||||
[AC_MSG_RESULT([using standard lock type])]
|
||||
)],
|
||||
[standard],[AC_MSG_RESULT([using standard lock type])],
|
||||
[AC_MSG_ERROR([You must specify "adaptive" or "standard" for --with-locktype.])]
|
||||
)
|
||||
|
||||
AC_CHECK_HEADERS([sched.h])
|
||||
|
||||
AC_SEARCH_LIBS([sched_yield],[rt])
|
||||
|
||||
@@ -23,7 +23,13 @@
|
||||
#include <isc/result.h> /* for ISC_R_ codes */
|
||||
#include <isc/util.h>
|
||||
|
||||
#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
|
||||
|
||||
|
||||
@@ -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);
|
||||
#ifdef HAVE_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);
|
||||
|
||||
@@ -328,7 +328,6 @@ struct isc_nm {
|
||||
isc_mem_t *mctx;
|
||||
isc_loopmgr_t *loopmgr;
|
||||
uint32_t nloops;
|
||||
isc_mutex_t lock;
|
||||
isc__networker_t *workers;
|
||||
|
||||
isc_stats_t *stats;
|
||||
|
||||
@@ -179,7 +179,6 @@ isc_netmgr_create(isc_mem_t *mctx, isc_loopmgr_t *loopmgr, isc_nm_t **netmgrp) {
|
||||
};
|
||||
|
||||
isc_mem_attach(mctx, &netmgr->mctx);
|
||||
isc_mutex_init(&netmgr->lock);
|
||||
isc_refcount_init(&netmgr->references, 1);
|
||||
atomic_init(&netmgr->maxudp, 0);
|
||||
atomic_init(&netmgr->shuttingdown, false);
|
||||
@@ -253,8 +252,6 @@ nm_destroy(isc_nm_t **mgr0) {
|
||||
isc_stats_detach(&mgr->stats);
|
||||
}
|
||||
|
||||
isc_mutex_destroy(&mgr->lock);
|
||||
|
||||
isc_mem_cput(mgr->mctx, mgr->workers, mgr->nloops,
|
||||
sizeof(mgr->workers[0]));
|
||||
isc_mem_putanddetach(&mgr->mctx, mgr, sizeof(*mgr));
|
||||
|
||||
Reference in New Issue
Block a user