Permalink
Browse files

should fix #1662, reloading while checking for domains that need to b…

…e notified in BIND, causing lock
  • Loading branch information...
1 parent 1b44e42 commit c7287b67f5aaf3804354a12678daa2eeba46af03 @ahupowerdns ahupowerdns committed Aug 19, 2014
Showing with 21 additions and 19 deletions.
  1. +21 −19 modules/bindbackend/bindbackend2.cc
@@ -290,41 +290,43 @@ bool Bind2Backend::feedRecord(const DNSResourceRecord &r, string *ordername)
void Bind2Backend::getUpdatedMasters(vector<DomainInfo> *changedDomains)
{
- vector<BB2DomainInfo> toPut;
+ vector<DomainInfo> consider;
{
ReadLock rl(&s_state_lock);
- SOAData soadata;
for(state_t::const_iterator i = s_state.begin(); i != s_state.end() ; ++i) {
if(!i->d_masters.empty() && this->alsoNotify.empty() && i->d_also_notify.empty())
continue;
- soadata.serial=0;
- try {
- this->getSOA(i->d_name, soadata); // we might not *have* a SOA yet, but this might trigger a load of it
- }
- catch(...){}
+
DomainInfo di;
di.id=i->d_id;
- di.serial=soadata.serial;
+
di.zone=i->d_name;
di.last_check=i->d_lastcheck;
+ di.notified_serial = i->d_lastnotified;
di.backend=this;
di.kind=DomainInfo::Master;
if(!i->d_lastnotified) { // don't do notification storm on startup
- // what if i->first is new??
- BB2DomainInfo bbd;
- if(safeGetBBDomainInfo(i->d_id, &bbd)) { // we hold a readlock, so this is fine
- bbd.d_lastnotified=soadata.serial;
- toPut.push_back(bbd); // but we can't write yet
- }
+ consider.push_back(di);
}
- else
- if(soadata.serial != i->d_lastnotified)
- changedDomains->push_back(di);
}
}
- BOOST_FOREACH(BB2DomainInfo& bbd, toPut) {
- safePutBBDomainInfo(bbd);
+
+ SOAData soadata;
+ BOOST_FOREACH(DomainInfo& di, consider) {
+ soadata.serial=0;
+ try {
+ this->getSOA(di.zone, soadata); // we might not *have* a SOA yet, but this might trigger a load of it
+ }
+ catch(...){}
+ BB2DomainInfo bbd;
+ if(safeGetBBDomainInfo(di.id, &bbd)) {
+ bbd.d_lastnotified=soadata.serial;
+ safePutBBDomainInfo(bbd);
+ }
+ di.serial=soadata.serial;
+ if(soadata.serial != di.notified_serial)
+ changedDomains->push_back(di);
}
}

0 comments on commit c7287b6

Please sign in to comment.