]> granicus.if.org Git - pdns/commitdiff
fix use of 'original' zone state instead of a safe copy in Bind2Backend::getUpdatedMa...
authorBert Hubert <bert.hubert@netherlabs.nl>
Mon, 3 Sep 2007 11:08:50 +0000 (11:08 +0000)
committerBert Hubert <bert.hubert@netherlabs.nl>
Mon, 3 Sep 2007 11:08:50 +0000 (11:08 +0000)
plus s/Master/Slave/ in a somewhat important place

git-svn-id: svn://svn.powerdns.com/pdns/trunk/pdns@1089 d19b8d6e-7fed-0310-83ef-9ca221ded41b

pdns/backends/bind/bindbackend2.cc
pdns/backends/gsql/gsqlbackend.cc

index 40fa9c21873ab8a83deea99850c6dd42d7f8a773..0895e3dc8bf168f2e6484860f231901f5e36486a 100644 (file)
@@ -225,10 +225,9 @@ bool Bind2Backend::feedRecord(const DNSResourceRecord &r)
 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;
@@ -243,8 +242,10 @@ void Bind2Backend::getUpdatedMasters(vector<DomainInfo> *changedDomains)
     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);
index aa8cb1cf5bb4d514a9da2f4e5485917776b53103..d228be30f5eaf78ef19bd6b4204a5525afd022de 100644 (file)
@@ -110,7 +110,7 @@ bool GSQLBackend::getDomainInfo(const string &domain, DomainInfo &di)
     di.kind=DomainInfo::Slave;
   }
   else if(iequals(type,"MASTER"))
-    di.kind=DomainInfo::Slave;
+    di.kind=DomainInfo::Master;
   else 
     di.kind=DomainInfo::Native;