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);