From: Michał Kępień Date: Mon, 27 Nov 2017 08:48:10 +0000 (+0100) Subject: [master] Do not use thread-local storage for storing LMDB reader locktable slots X-Git-Tag: v9.12.0rc1~52 X-Git-Url: http://git.ipfire.org/gitweb/?a=commitdiff_plain;h=40a90fbf89738c1aa867a5f09ef7243ef3ae52e4;p=thirdparty%2Fbind9.git [master] Do not use thread-local storage for storing LMDB reader locktable slots 4828. [bug] Do not use thread-local storage for storing LMDB reader locktable slots. [RT #46556] --- diff --git a/CHANGES b/CHANGES index dab96a8f17c..562164c9450 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 14f6bcfebef..69a52693bd8 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 87420066a69..df5d8f4b66d 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,