diff options
author | Roman Smrž <roman.smrz@seznam.cz> | 2024-01-24 21:27:32 +0100 |
---|---|---|
committer | Roman Smrž <roman.smrz@seznam.cz> | 2024-08-13 21:29:05 +0200 |
commit | 0eb84d2c6d4657c482b3deff8d4114d676197099 (patch) | |
tree | 65f076288121bd07dd9f19691c25cbfb1aa737d6 /src | |
parent | e7687e020f6d31a22aadb08aa73ae000796ae139 (diff) |
Server: start worker threads after initialization of services
Diffstat (limited to 'src')
-rw-r--r-- | src/network.cpp | 13 | ||||
-rw-r--r-- | src/network.h | 2 |
2 files changed, 11 insertions, 4 deletions
diff --git a/src/network.cpp b/src/network.cpp index e63949f..5807381 100644 --- a/src/network.cpp +++ b/src/network.cpp @@ -34,9 +34,11 @@ Server::Server(const Head<LocalState> & head, ServerConfig && config): p->services.reserve(config.services.size()); for (const auto & ctor : config.services) p->services.emplace_back(ctor(*this)); + + p->startThreads(); } -Server:: Server(const std::shared_ptr<Priv> & ptr): +Server::Server(const std::shared_ptr<Priv> & ptr): p(ptr) { } @@ -366,9 +368,6 @@ Server::Priv::Priv(const Head<LocalState> & local, const Identity & self): laddr.sin6_port = htons(discoveryPort); if (::bind(sock, (sockaddr *) &laddr, sizeof(laddr)) < 0) throw std::system_error(errno, std::generic_category()); - - threadListen = thread([this] { doListen(); }); - threadAnnounce = thread([this] { doAnnounce(); }); } Server::Priv::~Priv() @@ -391,6 +390,12 @@ shared_ptr<Server::Priv> Server::Priv::getptr() return shared_ptr<Priv>(this, [](Priv *){}); } +void Server::Priv::startThreads() +{ + threadListen = thread([this] { doListen(); }); + threadAnnounce = thread([this] { doAnnounce(); }); +} + void Server::Priv::doListen() { unique_lock lock(dataMutex); diff --git a/src/network.h b/src/network.h index 12ec4e1..4c23b47 100644 --- a/src/network.h +++ b/src/network.h @@ -89,6 +89,8 @@ struct Server::Priv shared_ptr<Priv> getptr(); + void startThreads(); + void doListen(); void doAnnounce(); |