From ca19e5b0723312be765d5ab2e1b8450ff85a6479 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Benedikt-Alexander=20Mokro=C3=9F?= Date: Tue, 23 Feb 2021 09:45:46 +0100 Subject: [PATCH] Implemented move-constructor of `HttpProcessor::Task` to use its performance-gain over copy. --- src/oatpp/web/server/HttpConnectionHandler.cpp | 2 +- src/oatpp/web/server/HttpProcessor.cpp | 12 +++++++++++- src/oatpp/web/server/HttpProcessor.hpp | 5 +++++ 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/src/oatpp/web/server/HttpConnectionHandler.cpp b/src/oatpp/web/server/HttpConnectionHandler.cpp index 61d9d654..a0ddd67e 100644 --- a/src/oatpp/web/server/HttpConnectionHandler.cpp +++ b/src/oatpp/web/server/HttpConnectionHandler.cpp @@ -74,7 +74,7 @@ void HttpConnectionHandler::handleConnection(const std::shared_ptrsetInputStreamIOMode(oatpp::data::stream::IOMode::BLOCKING); /* Create working thread */ - std::thread thread(&HttpProcessor::Task::run, HttpProcessor::Task(m_components, connection, &m_spawns)); + std::thread thread(&HttpProcessor::Task::run, std::move(HttpProcessor::Task(m_components, connection, &m_spawns))); /* Get hardware concurrency -1 in order to have 1cpu free of workers. */ v_int32 concurrency = oatpp::concurrency::getHardwareConcurrency(); diff --git a/src/oatpp/web/server/HttpProcessor.cpp b/src/oatpp/web/server/HttpProcessor.cpp index 6483c729..fc0ce88b 100644 --- a/src/oatpp/web/server/HttpProcessor.cpp +++ b/src/oatpp/web/server/HttpProcessor.cpp @@ -236,6 +236,14 @@ HttpProcessor::Task::Task(const HttpProcessor::Task ©) (*m_counter)++; } +HttpProcessor::Task::Task(HttpProcessor::Task &&move) + : m_components(std::move(move.m_components)) + , m_connection(std::move(move.m_connection)) + , m_counter(move.m_counter) +{ + move.m_counter = nullptr; +} + void HttpProcessor::Task::run(){ m_connection->initContexts(); @@ -258,7 +266,9 @@ void HttpProcessor::Task::run(){ } HttpProcessor::Task::~Task() { - (*m_counter)--; + if (m_counter != nullptr) { + (*m_counter)--; + } } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// diff --git a/src/oatpp/web/server/HttpProcessor.hpp b/src/oatpp/web/server/HttpProcessor.hpp index 36e17add..df230fbb 100644 --- a/src/oatpp/web/server/HttpProcessor.hpp +++ b/src/oatpp/web/server/HttpProcessor.hpp @@ -207,6 +207,11 @@ public: */ Task(const Task ©); + /** + * Move-Constructor to correclty count tasks; + */ + Task(Task &&move); + /** * Destructor, needed for counting. */