Changeset 987

Show
Ignore:
Timestamp:
03/24/07 22:34:32 (6 years ago)
Author:
ahu
Message:

fix one source of crashes and deadlocks in the BIND backend

Location:
trunk/pdns/pdns
Files:
4 modified

Legend:

Unmodified
Added
Removed
  • trunk/pdns/pdns/backends/bind/bindbackend2.cc

    r984 r987  
    384384string Bind2Backend::DLReloadNowHandler(const vector<string>&parts, Utility::pid_t ppid) 
    385385{ 
     386  shared_ptr<State> state = s_state; 
    386387  ostringstream ret; 
    387388 
    388389  for(vector<string>::const_iterator i=parts.begin()+1;i<parts.end();++i) { 
    389     if(s_state->name_id_map.count(*i)) { 
    390       shared_ptr<State> state=s_state; 
     390    if(state->name_id_map.count(*i)) { 
    391391      BB2DomainInfo& bbd=state->id_zone_map[state->name_id_map[*i]]; 
    392392       
     
    406406{ 
    407407  ostringstream ret; 
     408  shared_ptr<State> state = s_state;; 
     409       
    408410  if(parts.size() > 1) { 
    409411    for(vector<string>::const_iterator i=parts.begin()+1;i<parts.end();++i) { 
    410       shared_ptr<State> state = s_state;; 
    411412      if(state->name_id_map.count(*i)) { 
    412413        BB2DomainInfo& bbd=state->id_zone_map[state->name_id_map[*i]];  // XXX s_name_id_map needs trick as well 
     
    418419  } 
    419420  else 
    420     for(id_zone_map_t::iterator i=us->s_state->id_zone_map.begin(); i!=us->s_state->id_zone_map.end(); ++i)  
     421    for(id_zone_map_t::iterator i=state->id_zone_map.begin(); i!=state->id_zone_map.end(); ++i)  
    421422      ret<< i->second.d_name << ": "<< (i->second.d_loaded ? "": "[rejected]") <<"\t"<<i->second.d_status<<"\n";       
    422423 
     
    430431string Bind2Backend::DLListRejectsHandler(const vector<string>&parts, Utility::pid_t ppid) 
    431432{ 
     433  shared_ptr<State> state = s_state; 
     434 
    432435  ostringstream ret; 
    433   for(id_zone_map_t::iterator j=us->s_state->id_zone_map.begin(); j!=us->s_state->id_zone_map.end(); ++j)  
     436  for(id_zone_map_t::iterator j = state->id_zone_map.begin(); j != state->id_zone_map.end(); ++j)  
    434437    if(!j->second.d_loaded) 
    435438      ret<<j->second.d_name<<"\t"<<j->second.d_status<<endl; 
     
    487490      throw; 
    488491    } 
    489  
    490  
    491492       
    492493    vector<BindDomainInfo> domains=BP.getDomains(); 
     
    646647{ 
    647648  bbd->d_loaded=0; // block further access 
    648   bbd->d_records->clear(); // empty the vector of Bind2DNSRecords 
     649  bbd->d_records = shared_ptr<vector<Bind2DNSRecord> > (new vector<Bind2DNSRecord>); 
    649650} 
    650651 
  • trunk/pdns/pdns/backends/bind/bindbackend2.hh

    r959 r987  
    112112  bool abortTransaction(); 
    113113 
     114  typedef map<string, int> name_id_map_t; 
    114115  typedef map<uint32_t, BB2DomainInfo> id_zone_map_t; 
    115   typedef map<string,int> name_id_map_t; 
    116116 
    117117  struct State  
  • trunk/pdns/pdns/distributor.hh

    r954 r987  
    8080  } 
    8181 
    82  
    83  
    84  
    8582  struct QuestionData 
    8683  { 
     
    9188  }; 
    9289 
    93  
    9490  typedef pair<QuestionData, AnswerData> tuple_t; 
    9591   
     
    179175      pthread_mutex_unlock(&us->q_lock); 
    180176      Answer *a;       
    181  
    182177 
    183178#ifndef SMTPREDIR 
  • trunk/pdns/pdns/utility.hh

    r972 r987  
    118118  //! Retrieves the semaphore value. 
    119119  int getValue( Semaphore::sem_value_t *sval ); 
    120  
    121120}; 
    122121