From: Bert Hubert Date: Mon, 11 Jul 2005 07:34:27 +0000 (+0000) Subject: simplified TCP outgoing query code in attempt to smoke out crasher bug X-Git-Tag: pdns-2.9.18~10 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=72df400fb1312b5cb44d57cfe98f1ab831437f09;p=pdns simplified TCP outgoing query code in attempt to smoke out crasher bug git-svn-id: svn://svn.powerdns.com/pdns/trunk/pdns@439 d19b8d6e-7fed-0310-83ef-9ca221ded41b --- diff --git a/pdns/pdns_recursor.cc b/pdns/pdns_recursor.cc index 37baa6007..fbc94d7c5 100644 --- a/pdns/pdns_recursor.cc +++ b/pdns/pdns_recursor.cc @@ -39,6 +39,7 @@ #include "sstuff.hh" #include #include +#include using namespace boost; @@ -712,14 +713,14 @@ int main(int argc, char **argv) } for(map::iterator i=d_tcpclientreadsocks.begin(); i!=d_tcpclientreadsocks.end();) { + bool haveErased=false; if(FD_ISSET(i->first, &readfds)) { // can we receive - // cerr<<"Something happened on our socket when we wanted to read "<first<second.inMSG.size()<second.inNeeded]; - int ret=read(i->first, buffer, min(i->second.inNeeded,200)); + shared_array buffer(new char[i->second.inNeeded]); + + int ret=read(i->first, buffer.get(), min(i->second.inNeeded,200)); // cerr<<"Read returned "< 0) { - i->second.inMSG.append(buffer, buffer+ret); + i->second.inMSG.append(&buffer[0], &buffer[ret]); i->second.inNeeded-=ret; if(!i->second.inNeeded) { // cerr<<"Got entire load of "<second.inMSG.size()<<" bytes"<second.inMSG; d_tcpclientreadsocks.erase((i++)); + haveErased=true; MT->sendEvent(pid, &msg); // XXX DODGY } else { // cerr<<"Still have "<second.inNeeded<<" left to go"<first<<" available for writing"<first, i->second.outMSG.c_str(), i->second.outMSG.size() - i->second.outPos); @@ -755,17 +755,16 @@ int main(int argc, char **argv) PacketID pid=i->second; d_tcpclientwritesocks.erase((i++)); MT->sendEvent(pid, 0); + haveErased=true; // cerr<<"Sent event too"<