void Bind2Backend::getUpdatedMasters(vector<DomainInfo> *changedDomains)
{
SOAData soadata;
+ shared_ptr<State> state = s_state;
- // Lock l(&s_state_lock); // we don't really change the zone map, just flip a bit
-
- for(id_zone_map_t::iterator i = s_state->id_zone_map.begin(); i != s_state->id_zone_map.end() ; ++i) {
+ for(id_zone_map_t::const_iterator i = state->id_zone_map.begin(); i != state->id_zone_map.end() ; ++i) {
if(!i->second.d_masters.empty())
continue;
soadata.serial=0;
di.last_check=i->second.d_lastcheck;
di.backend=this;
di.kind=DomainInfo::Master;
- if(!i->second.d_lastnotified) // don't do notification storm on startup
- i->second.d_lastnotified=soadata.serial;
+ if(!i->second.d_lastnotified) { // don't do notification storm on startup
+ Lock l(&s_state_lock);
+ s_state->id_zone_map[i->first].d_lastnotified=soadata.serial;
+ }
else
if(soadata.serial!=i->second.d_lastnotified)
changedDomains->push_back(di);
di.kind=DomainInfo::Slave;
}
else if(iequals(type,"MASTER"))
- di.kind=DomainInfo::Slave;
+ di.kind=DomainInfo::Master;
else
di.kind=DomainInfo::Native;