From: Peter van Dijk Date: Tue, 22 Oct 2013 09:06:57 +0000 (-0700) Subject: Merge pull request #1027 from paboldin/bind-lock-file X-Git-Tag: rec-3.6.0-rc1~386 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=9f6c698949629b867bc23df0896f3618ae0ff6a1;p=pdns Merge pull request #1027 from paboldin/bind-lock-file bind-supermaster-lock: use different lock for supermaster config file --- 9f6c698949629b867bc23df0896f3618ae0ff6a1 diff --cc pdns/backends/bind/bindbackend2.cc index c6fa1c112,ef0bb9cc1..919e6f682 --- a/pdns/backends/bind/bindbackend2.cc +++ b/pdns/backends/bind/bindbackend2.cc @@@ -1344,23 -1343,30 +1343,30 @@@ bool Bind2Backend::createSlaveDomain(co L << Logger::Warning << d_logprefix << " Writing bind config zone statement for superslave zone '" << domain << "' from supermaster " << ip << endl; + + { + Lock l2(&s_supermaster_config_lock); - ofstream c_of(getArg("supermaster-config").c_str(), std::ios::app); - if (!c_of) { - L << Logger::Error << "Unable to open supermaster configfile for append: " << stringerror() << endl; - throw DBException("Unable to open supermaster configfile for append: "+stringerror()); + ofstream c_of(getArg("supermaster-config").c_str(), std::ios::app); + if (!c_of) { + L << Logger::Error << "Unable to open supermaster configfile for append: " << stringerror() << endl; + throw DBException("Unable to open supermaster configfile for append: "+stringerror()); + } + + c_of << endl; + c_of << "# Superslave zone " << domain << " (added: " << nowTime() << ") (account: " << account << ')' << endl; + c_of << "zone \"" << domain << "\" {" << endl; + c_of << "\ttype slave;" << endl; + c_of << "\tfile \"" << filename << "\";" << endl; + c_of << "\tmasters { " << ip << "; };" << endl; + c_of << "};" << endl; + c_of.close(); } - - c_of << endl; - c_of << "# Superslave zone " << domain << " (added: " << nowTime() << ") (account: " << account << ')' << endl; - c_of << "zone \"" << domain << "\" {" << endl; - c_of << "\ttype slave;" << endl; - c_of << "\tfile \"" << filename << "\";" << endl; - c_of << "\tmasters { " << ip << "; };" << endl; - c_of << "};" << endl; - c_of.close(); + + // Interference with loadConfig() and DLAddDomainHandler(), use locking + Lock l(&s_state_lock); - BB2DomainInfo &bbd = createDomain(canonic(domain), filename); + BB2DomainInfo &bbd = createDomainEntry(canonic(domain), filename); bbd.d_masters.push_back(ip);