aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2016-02-24 17:52:07 +0100
committerShauren <shauren.trinity@gmail.com>2016-02-24 17:52:07 +0100
commite3b162db7a54c748a33ef357f5b8151b82a29fa0 (patch)
treea1c6969ede1a37f5993a33c2b3e63e9da6ecaad8 /src
parenta0b2be6c1d0ae17ad8a17692d77f2020bbb9296e (diff)
Core/IPC: Fixed bnet & world servers getting stuck on shutdown after having communicated at any point
Diffstat (limited to 'src')
-rw-r--r--src/server/ipc/ZMQTask.cpp1
-rw-r--r--src/server/ipc/ZmqContext.cpp7
2 files changed, 6 insertions, 2 deletions
diff --git a/src/server/ipc/ZMQTask.cpp b/src/server/ipc/ZMQTask.cpp
index e82449880c2..6d359d9b10a 100644
--- a/src/server/ipc/ZMQTask.cpp
+++ b/src/server/ipc/ZMQTask.cpp
@@ -44,6 +44,7 @@ void ZMQTask::Start()
void ZMQTask::End()
{
_thread->join();
+ _poller->remove(*_inproc);
_inproc->close();
HandleClose();
}
diff --git a/src/server/ipc/ZmqContext.cpp b/src/server/ipc/ZmqContext.cpp
index 274759121bd..bc062de8e88 100644
--- a/src/server/ipc/ZmqContext.cpp
+++ b/src/server/ipc/ZmqContext.cpp
@@ -23,13 +23,14 @@ ZmqContext::ZmqContext() : _inproc(nullptr)
ZmqContext::~ZmqContext()
{
- delete _inproc;
}
zmqpp::socket* ZmqContext::CreateNewSocket(zmqpp::socket_type type)
{
std::unique_lock<std::mutex> lock(_mutex);
- return new zmqpp::socket(_context, type);
+ zmqpp::socket* socket = new zmqpp::socket(_context, type);
+ socket->set(zmqpp::socket_option::linger, 0);
+ return socket;
}
void ZmqContext::Initialize()
@@ -49,4 +50,6 @@ zmqpp::socket* ZmqContext::CreateInprocSubscriber()
void ZmqContext::Close()
{
_inproc->send("internalmq.kill");
+ delete _inproc;
+ _inproc = nullptr;
}