diff --git a/receiver/src/main.cpp b/receiver/src/main.cpp index cadcd9695e11884c44941195b50202230934ed78..e09fefd4d19eb96abd4af1b1b0f39b1e63266974 100644 --- a/receiver/src/main.cpp +++ b/receiver/src/main.cpp @@ -20,13 +20,18 @@ asapo::Error ReadConfigFile(int argc, char* argv[]) { return factory.SetConfig(argv[1]); } +void AddDataServers(const asapo::ReceiverConfig* config, asapo::SharedCache cache, + std::vector<asapo::RdsNetServerPtr>& netServers) { + // Add TCP + netServers.emplace_back(new asapo::RdsTcpServer("0.0.0.0:" + std::to_string(config->dataserver.listen_port))); +} + std::vector<std::thread> StartDataServers(const asapo::ReceiverConfig* config, asapo::SharedCache cache, asapo::Error* error) { std::vector<asapo::RdsNetServerPtr> netServers; std::vector<std::thread> dataServerThreads; - // Add TCP - netServers.emplace_back(new asapo::RdsTcpServer("0.0.0.0:" + std::to_string(config->dataserver.listen_port))); + AddDataServers(config, cache, netServers); for (auto& server : netServers) { *error = server->Initialize(); @@ -37,13 +42,15 @@ std::vector<std::thread> StartDataServers(const asapo::ReceiverConfig* config, a dataServerThreads.reserve(netServers.size()); for (auto& server : netServers) { - dataServerThreads.emplace_back(std::thread([config, cache, &server] { - asapo::ReceiverDataServer data_server{ - std::move(server), - config->log_level, - cache, - config->dataserver}; - data_server.Run(); + // Allocate the server here in order to make sure all variables are still available + auto data_server = new asapo::ReceiverDataServer{ + std::move(server), + config->log_level, + cache, + config->dataserver}; + dataServerThreads.emplace_back(std::thread([data_server] { + // We use a std::unique_ptr here in order to clean up the data_server once Run() is done. + std::unique_ptr<asapo::ReceiverDataServer>(data_server)->Run(); })); } diff --git a/receiver/src/receiver_data_server/receiver_data_server.h b/receiver/src/receiver_data_server/receiver_data_server.h index f26a49ac5e657008fc28d0da0380ea0a82547ce7..e2de13fd4fa86f7064aeae805d2daa2d2725787c 100644 --- a/receiver/src/receiver_data_server/receiver_data_server.h +++ b/receiver/src/receiver_data_server/receiver_data_server.h @@ -20,6 +20,7 @@ class ReceiverDataServer { public: explicit ReceiverDataServer(std::unique_ptr<RdsNetServer> net_server, LogLevel log_level, SharedCache data_cache, const ReceiverDataServerConfig& config); + std::unique_ptr<RequestPool> request_pool__; std::unique_ptr<RdsNetServer> net__; const AbstractLogger* log__;