]> granicus.if.org Git - pdns/commitdiff
make single threaded mode more resilient against exceptions - thanks Daniel Drown
authorBert Hubert <bert.hubert@netherlabs.nl>
Sat, 15 Nov 2008 19:58:30 +0000 (19:58 +0000)
committerBert Hubert <bert.hubert@netherlabs.nl>
Sat, 15 Nov 2008 19:58:30 +0000 (19:58 +0000)
git-svn-id: svn://svn.powerdns.com/pdns/trunk/pdns@1272 d19b8d6e-7fed-0310-83ef-9ca221ded41b

pdns/distributor.hh
pdns/packethandler.cc

index 23c99c2a4e3091d7159dff8cdc84bc385d277191..f882be621ec5c014958d457d85c365234e291f78 100644 (file)
@@ -241,7 +241,22 @@ template<class Answer, class Question, class Backend>int Distributor<Answer,Ques
     }
     Answer *a;
 
-    a=b->question(q);
+    try {
+      a=b->question(q); // a can be NULL!
+    }
+    catch(const AhuException &e) {
+      L<<Logger::Error<<"Backend error: "<<e.reason<<endl;
+      delete b;
+      b=0;
+      return 0;
+    }
+    catch(...) {
+      L<<Logger::Error<<Logger::NTLog<<"Caught unknown exception in Distributor thread "<<(unsigned long)pthread_self()<<endl;
+      delete b;
+      b=0;
+      return 0;
+    }
+
 
     AnswerData AD;
     AD.A=a;
index 978bc7478ef96619f9923c2fbb8afeea788a27b9..0ad14b802a7a53df2aeedf3f4351c7dd9335396d 100644 (file)
@@ -196,7 +196,7 @@ int PacketHandler::doDNSCheckRequest(DNSPacket *p, DNSPacket *r, string &target)
   DNSResourceRecord rr;
 
   if (p->qclass == 3 && p->qtype.getName() == "HINFO") {
-    rr.content = "PowerDNS $Id$";
+    rr.content = "\"PowerDNS\" \"$Id$\"";
     rr.ttl = 5;
     rr.qname=target;
     rr.qtype=13; // hinfo