From: Remi Gacogne Date: Mon, 24 Jul 2017 13:29:15 +0000 (+0200) Subject: auth: Get rid of the webserver's connectionThreadData struct X-Git-Tag: dnsdist-1.2.0~52^2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=refs%2Fpull%2F5543%2Fhead;p=thirdparty%2Fpdns.git auth: Get rid of the webserver's connectionThreadData struct Thanks to zeha for suggesting that the struct was not needed anymore since `std::thread` takes a variable number of parameters. --- diff --git a/pdns/webserver.cc b/pdns/webserver.cc index d89268cb56..09e838ac0e 100644 --- a/pdns/webserver.cc +++ b/pdns/webserver.cc @@ -35,11 +35,6 @@ #include "arguments.hh" #include -struct connectionThreadData { - WebServer* webServer{nullptr}; - std::shared_ptr 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 data) { - data->webServer->serveConnection(data->client); +static void *WebServerConnectionThreadStart(const WebServer* webServer, std::shared_ptr 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 client) +void WebServer::serveConnection(std::shared_ptr 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(); - 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< client); - void handleRequest(HttpRequest& request, HttpResponse& resp); + void serveConnection(std::shared_ptr client) const; + void handleRequest(HttpRequest& request, HttpResponse& resp) const; typedef boost::function HandlerFunction; void registerApiHandler(const string& url, HandlerFunction handler); diff --git a/pdns/ws-recursor.cc b/pdns/ws-recursor.cc index 404c5f4f79..f590bd12b7 100644 --- a/pdns/ws-recursor.cc +++ b/pdns/ws-recursor.cc @@ -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 client) +void AsyncWebServer::serveConnection(std::shared_ptr client) const try { HttpRequest req; YaHTTP::AsyncRequestLoader yarl; diff --git a/pdns/ws-recursor.hh b/pdns/ws-recursor.hh index 8b6974f912..9df3a81c7e 100644 --- a/pdns/ws-recursor.hh +++ b/pdns/ws-recursor.hh @@ -54,7 +54,7 @@ public: private: FDMultiplexer* d_fdm; - void serveConnection(std::shared_ptr socket); + void serveConnection(std::shared_ptr socket) const; protected: virtual std::shared_ptr createServer() override {