Show
Ignore:
Timestamp:
06/21/03 11:59:08 (10 years ago)
Author:
ahu
Message:

lots of changes, mostly a crash fix

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • trunk/pdns/pdns/communicator.cc

    r157 r174  
    1717    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
    1818*/ 
     19 
    1920#include "utility.hh" 
    2021#include <errno.h> 
     
    3233 
    3334 
    34 void CommunicatorClass::addSuckRequest(const string &domain, const string &master) 
     35void CommunicatorClass::addSuckRequest(const string &domain, const string &master, bool priority) 
    3536{ 
    3637  Lock l(&d_lock); 
     
    4041  sr.master = master; 
    4142 
    42   d_suckdomains.push(sr); 
     43  if(priority) { 
     44    d_suckdomains.push_front(sr); 
     45    d_havepriosuckrequest=true; 
     46  } 
     47  else  
     48    d_suckdomains.push_back(sr); 
    4349   
    4450  d_suck_sem.post(); 
     
    234240      (sdomains.size()>1 ? "" : "s")<< 
    235241      " checking"<<endl; 
    236    
     242 
     243  Resolver resolver; 
     244  resolver.makeUDPSocket(); 
    237245  for(vector<DomainInfo>::const_iterator i=sdomains.begin();i!=sdomains.end();++i) { 
    238246    d_slaveschanged=true; 
     
    240248 
    241249    try { 
    242       Resolver resolver; 
    243       int res=resolver.getSoaSerial(i->master,i->zone, &theirserial); 
     250      if(d_havepriosuckrequest) { 
     251        d_havepriosuckrequest=false; 
     252        break; 
     253      } 
     254 
     255      resolver.sendSoaSerialRequest(i->master,i->zone); 
     256      string master, zone; 
     257      int res=resolver.getSoaSerialAnswer(master,zone,&theirserial); 
     258 
    244259      if(res<=0) { 
    245260        L<<Logger::Error<<"Unable to determine SOA serial for "<<i->zone<<" at "<<i->master<<endl; 
     
    427442              Lock l(&d_lock); 
    428443              sr=d_suckdomains.front(); 
    429               d_suckdomains.pop(); 
     444              d_suckdomains.pop_front(); 
    430445            } 
    431446            suck(sr.domain,sr.master);