diff --git a/CHANGES b/CHANGES index dab96a8f17..562164c945 100644 --- a/CHANGES +++ b/CHANGES @@ -1,3 +1,6 @@ +4828. [bug] Do not use thread-local storage for storing LMDB reader + locktable slots. [RT #46556] + 4827. [misc] Add a precommit check script util/checklibs.sh [RT #46215] diff --git a/bin/named/server.c b/bin/named/server.c index 14f6bcfebe..69a52693bd 100644 --- a/bin/named/server.c +++ b/bin/named/server.c @@ -12085,8 +12085,13 @@ nzd_env_reopen(dns_view_t *view) { } } + /* + * MDB_NOTLS is used to prevent problems after configuration is + * reloaded, due to the way LMDB's use of thread-local storage (TLS) + * interacts with the BIND9 thread model. + */ status = mdb_env_open(env, view->new_zone_db, - MDB_NOSUBDIR|MDB_CREATE, 0600); + MDB_NOSUBDIR|MDB_NOTLS|MDB_CREATE, 0600); if (status != 0) { isc_log_write(dns_lctx, DNS_LOGCATEGORY_GENERAL, ISC_LOGMODULE_OTHER, ISC_LOG_ERROR, diff --git a/lib/dns/view.c b/lib/dns/view.c index 87420066a6..df5d8f4b66 100644 --- a/lib/dns/view.c +++ b/lib/dns/view.c @@ -2122,8 +2122,13 @@ dns_view_setnewzones(dns_view_t *view, isc_boolean_t allow, void *cfgctx, } } + /* + * MDB_NOTLS is used to prevent problems after configuration is + * reloaded, due to the way LMDB's use of thread-local storage (TLS) + * interacts with the BIND9 thread model. + */ status = mdb_env_open(env, view->new_zone_db, - MDB_NOSUBDIR|MDB_CREATE, 0600); + MDB_NOSUBDIR|MDB_NOTLS|MDB_CREATE, 0600); if (status != 0) { isc_log_write(dns_lctx, DNS_LOGCATEGORY_GENERAL, ISC_LOGMODULE_OTHER, ISC_LOG_ERROR,