]> granicus.if.org Git - pdns/commitdiff
auth: Get rid of the webserver's connectionThreadData struct
authorRemi Gacogne <remi.gacogne@powerdns.com>
Mon, 24 Jul 2017 13:29:15 +0000 (15:29 +0200)
committerRemi Gacogne <remi.gacogne@powerdns.com>
Mon, 24 Jul 2017 13:29:15 +0000 (15:29 +0200)
Thanks to zeha for suggesting that the struct was not needed anymore
since `std::thread` takes a variable number of parameters.

pdns/webserver.cc
pdns/webserver.hh
pdns/ws-recursor.cc
pdns/ws-recursor.hh

index d89268cb568e32a0e09a6b09a69ebf86ec958d18..09e838ac0ee98eb191698d2c116d7ad1c2bdfd33 100644 (file)
 #include "arguments.hh"
 #include <yahttp/router.hpp>
 
-struct connectionThreadData {
-  WebServer* webServer{nullptr};
-  std::shared_ptr<Socket> client{nullptr};
-};
-
 json11::Json HttpRequest::json()
 {
   string err;
@@ -199,12 +194,12 @@ void WebServer::registerWebHandler(const string& url, HandlerFunction handler) {
   registerBareHandler(url, f);
 }
 
-static void *WebServerConnectionThreadStart(std::shared_ptr<connectionThreadData> data) {
-  data->webServer->serveConnection(data->client);
+static void *WebServerConnectionThreadStart(const WebServer* webServer, std::shared_ptr<Socket> client) {
+  webServer->serveConnection(client);
   return nullptr;
 }
 
-void WebServer::handleRequest(HttpRequest& req, HttpResponse& resp)
+void WebServer::handleRequest(HttpRequest& req, HttpResponse& resp) const
 {
   // set default headers
   resp.headers["Content-Type"] = "text/html; charset=utf-8";
@@ -281,7 +276,7 @@ void WebServer::handleRequest(HttpRequest& req, HttpResponse& resp)
   }
 }
 
-void WebServer::serveConnection(std::shared_ptr<Socket> client)
+void WebServer::serveConnection(std::shared_ptr<Socket> client) const
 try {
   HttpRequest req;
   YaHTTP::AsyncRequestLoader yarl;
@@ -353,17 +348,14 @@ void WebServer::go()
     acl.toMasks(::arg()["webserver-allow-from"]);
 
     while(true) {
-      // data and data->client will be freed by thread
-      auto data = std::make_shared<connectionThreadData>();
-      data->webServer = this;
       try {
-        data->client = d_server->accept();
-        if (data->client->acl(acl)) {
-          std::thread webHandler(WebServerConnectionThreadStart, data);
+        auto client = d_server->accept();
+        if (client->acl(acl)) {
+          std::thread webHandler(WebServerConnectionThreadStart, this, client);
           webHandler.detach();
         } else {
           ComboAddress remote;
-          if (data->client->getRemote(remote))
+          if (client->getRemote(remote))
             L<<Logger::Error<<"Webserver closing socket: remote ("<< remote.toString() <<") does not match 'webserver-allow-from'"<<endl;
         }
       }
index 3972162bccc2e938bff76ddb1e7d8e3a74004024..b3ede8925ea67a863be5eaafa940bd0d81888dab 100644 (file)
@@ -142,8 +142,8 @@ public:
   void bind();
   void go();
 
-  void serveConnection(std::shared_ptr<Socket> client);
-  void handleRequest(HttpRequest& request, HttpResponse& resp);
+  void serveConnection(std::shared_ptr<Socket> client) const;
+  void handleRequest(HttpRequest& request, HttpResponse& resp) const;
 
   typedef boost::function<void(HttpRequest* req, HttpResponse* resp)> HandlerFunction;
   void registerApiHandler(const string& url, HandlerFunction handler);
index 404c5f4f7939a89f1d9d1824d05d635183afeef8..f590bd12b70eb51284972505d270d05e715aee4d 100644 (file)
@@ -379,7 +379,7 @@ static void apiServerCacheFlush(HttpRequest* req, HttpResponse* resp) {
 
 #include "htmlfiles.h"
 
-void serveStuff(HttpRequest* req, HttpResponse* resp) 
+static void serveStuff(HttpRequest* req, HttpResponse* resp)
 {
   resp->headers["Cache-Control"] = "max-age=86400";
 
@@ -560,7 +560,7 @@ void AsyncServer::newConnection()
 }
 
 // This is an entry point from FDM, so it needs to catch everything.
-void AsyncWebServer::serveConnection(std::shared_ptr<Socket> client)
+void AsyncWebServer::serveConnection(std::shared_ptr<Socket> client) const
 try {
   HttpRequest req;
   YaHTTP::AsyncRequestLoader yarl;
index 8b6974f912e772eb09bdfb183ec0392badb96d68..9df3a81c7e260e97495fdd8312edc28fac1ec3df 100644 (file)
@@ -54,7 +54,7 @@ public:
 
 private:
   FDMultiplexer* d_fdm;
-  void serveConnection(std::shared_ptr<Socket> socket);
+  void serveConnection(std::shared_ptr<Socket> socket) const;
 
 protected:
   virtual std::shared_ptr<Server> createServer() override {