From: Pavel Boldin Date: Wed, 11 Sep 2013 15:47:03 +0000 (+0400) Subject: bind-add-zone: lock reworked. caller of createDomain have to take lock X-Git-Tag: rec-3.6.0-rc1~440^2~1 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=672f21d6c15e5443b2dc37d52eb6de78bf210f04;p=thirdparty%2Fpdns.git bind-add-zone: lock reworked. caller of createDomain have to take lock --- diff --git a/pdns/backends/bind/bindbackend2.cc b/pdns/backends/bind/bindbackend2.cc index c6cd303ff9..1152cc2c9f 100644 --- a/pdns/backends/bind/bindbackend2.cc +++ b/pdns/backends/bind/bindbackend2.cc @@ -542,6 +542,9 @@ string Bind2Backend::DLAddDomainHandler(const vector&parts, Utility::pid if(getState()->name_id_map.count(domainname)) return "Already loaded"; + // Interference with loadConfig() and createSlaveDomain(), use locking + Lock l(&s_state_lock); + Bind2Backend bb2; BB2DomainInfo& bbd = bb2.createDomain(domainname, filename); @@ -551,10 +554,7 @@ string Bind2Backend::DLAddDomainHandler(const vector&parts, Utility::pid bbd.d_lastcheck=0; bbd.d_status="parsing into memory"; - { - Lock l(&s_state_lock); - s_state->name_id_map[bbd.d_name]=bbd.d_id; - } + s_state->name_id_map[bbd.d_name]=bbd.d_id; L<name_id_map[bbd.d_name] = bbd.d_id; - } + s_state->name_id_map[bbd.d_name] = bbd.d_id; return true; }