Unverified Commit 9cbb50b2 authored by kladko's avatar kladko

Fixed threads

parent dcdf8a31
...@@ -38,7 +38,7 @@ shared_ptr <ZMQServer> ZMQServer::zmqServer = nullptr; ...@@ -38,7 +38,7 @@ shared_ptr <ZMQServer> ZMQServer::zmqServer = nullptr;
ZMQServer::ZMQServer(bool _checkSignature, const string &_caCertFile) ZMQServer::ZMQServer(bool _checkSignature, const string &_caCertFile)
: checkSignature(_checkSignature), : checkSignature(_checkSignature),
caCertFile(_caCertFile), isExitRequested(false), ctx_(make_shared<zmq::context_t>(1)) { caCertFile(_caCertFile), ctx_(make_shared<zmq::context_t>(1)) {
frontend = make_shared<zmq::socket_t>(*ctx_, ZMQ_ROUTER); frontend = make_shared<zmq::socket_t>(*ctx_, ZMQ_ROUTER);
...@@ -127,12 +127,9 @@ void ZMQServer::run() { ...@@ -127,12 +127,9 @@ void ZMQServer::run() {
} }
void ZMQServer::exitWorkers() { void ZMQServer::exitAll() {
auto doExit = !isExitRequested.exchange(true);
if (doExit) {
spdlog::info("Tell workers to exit"); spdlog::info("Exiting zmq server workers ...");
for (auto &&worker : workers) { for (auto &&worker : workers) {
worker->requestExit(); worker->requestExit();
...@@ -142,43 +139,23 @@ void ZMQServer::exitWorkers() { ...@@ -142,43 +139,23 @@ void ZMQServer::exitWorkers() {
workerThread->join(); workerThread->join();
} }
spdlog::info("Workers exited"); spdlog::info("Exited zmq server workers ...");
// close server sockets
spdlog::info("Deleting threads ...");
worker_threads.empty();
spdlog::info("Deleting workers ...");
workers.clear();
spdlog::info("Deleted workers ...");
spdlog::info("Deleting front end and back end");
frontend = nullptr;
backend = nullptr;
spdlog::info("Deleted front end and back end");
spdlog::info("Terminating context ...");
// terminate context (destructor will be called)
ctx_ = nullptr;
spdlog::info("Terminated context ...");
}
} }
std::atomic<bool> ZMQServer::isExitRequested(false);
void ZMQServer::exitZMQServer() { void ZMQServer::exitZMQServer() {
auto doExit = !isExitRequested.exchange(true);
if (doExit) {
zmqServer->exitAll();
spdlog::info("Exiting zmq server workers ...");
zmqServer->exitWorkers();
spdlog::info("Exited zmq server workers ...");
spdlog::info("deleting zmq server"); spdlog::info("deleting zmq server");
zmqServer = nullptr; zmqServer = nullptr;
spdlog::info("deleted zmq server "); spdlog::info("deleted zmq server ");
}
} }
void ZMQServer::initZMQServer(bool _checkSignature) { void ZMQServer::initZMQServer(bool _checkSignature) {
...@@ -208,19 +185,25 @@ shared_ptr <std::thread> ZMQServer::serverThread = nullptr; ...@@ -208,19 +185,25 @@ shared_ptr <std::thread> ZMQServer::serverThread = nullptr;
ZMQServer::~ZMQServer() { ZMQServer::~ZMQServer() {
spdlog::info("Deleting worker threads");
worker_threads.clear();
spdlog::info("Deleted worker threads");
spdlog::info("Deleting workers ...");
workers.clear();
spdlog::info("Deleted workers ...");
spdlog::info("Deleting front end and back end");
frontend = nullptr;
backend = nullptr;
spdlog::info("Deleted front end and back end");
spdlog::info("Deleting server thread"); spdlog::info("Deleting server thread");
ZMQServer::serverThread = nullptr; ZMQServer::serverThread = nullptr;
spdlog::info("Deleted server thread"); spdlog::info("Deleted server thread");
spdlog::info("Deleting worker threads");
worker_threads.clear();
spdlog::info("Deleted worker threads");
spdlog::info("Deleting workers"); spdlog::info("Deleting ZMQ context");
workers.clear();
spdlog::info("Deleted workers");
spdlog::info("Deleting server context");
ctx_ = nullptr; ctx_ = nullptr;
spdlog::info("Deleted server context"); spdlog::info("Deleted ZMQ context");
} }
\ No newline at end of file
...@@ -61,7 +61,7 @@ public: ...@@ -61,7 +61,7 @@ public:
void run(); void run();
void exitWorkers(); void exitAll();
static void initZMQServer(bool _checkSignature); static void initZMQServer(bool _checkSignature);
static void exitZMQServer(); static void exitZMQServer();
...@@ -76,7 +76,7 @@ private: ...@@ -76,7 +76,7 @@ private:
std::vector<shared_ptr<ServerWorker> > workers; std::vector<shared_ptr<ServerWorker> > workers;
std::vector<shared_ptr<std::thread>> worker_threads; std::vector<shared_ptr<std::thread>> worker_threads;
std::atomic<bool> isExitRequested; static std::atomic<bool> isExitRequested;
}; };
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment