webserver: handle exceptions instead of SIGABRTing the world
authorPeter van Dijk <peter.van.dijk@powerdns.com>
Fri, 13 Sep 2019 13:07:08 +0000 (15:07 +0200)
committerPeter van Dijk <peter.van.dijk@powerdns.com>
Fri, 13 Sep 2019 13:07:08 +0000 (15:07 +0200)
pdns/webserver.cc

index 1b14c1487b39df93f18f83abf3d2d01f0aee08dd..eafd3059a00736bc4bda75fc2dbcc4ef99a95436 100644 (file)
@@ -202,7 +202,18 @@ void WebServer::registerWebHandler(const string& url, HandlerFunction handler) {
 
 static void *WebServerConnectionThreadStart(const WebServer* webServer, std::shared_ptr<Socket> client) {
   setThreadName("pdns-r/webhndlr");
-  webServer->serveConnection(client);
+  try {
+    webServer->serveConnection(client);
+  }
+  catch(PDNSException &e) {
+    g_log<<Logger::Error<<"PDNSException while serving a connection in main webserver thread: "<<e.reason<<endl;
+  }
+  catch(std::exception &e) {
+    g_log<<Logger::Error<<"STL Exception while serving a connection in main webserver thread: "<<e.what()<<endl;
+  }
+  catch(...) {
+    g_log<<Logger::Error<<"Unknown exception while serving a connection in main webserver thread"<<endl;
+  }
   return nullptr;
 }