From e3b162db7a54c748a33ef357f5b8151b82a29fa0 Mon Sep 17 00:00:00 2001 From: Shauren Date: Wed, 24 Feb 2016 17:52:07 +0100 Subject: Core/IPC: Fixed bnet & world servers getting stuck on shutdown after having communicated at any point --- src/server/ipc/ZMQTask.cpp | 1 + src/server/ipc/ZmqContext.cpp | 7 +++++-- 2 files changed, 6 insertions(+), 2 deletions(-) (limited to 'src') 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 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; } -- cgit v1.2.3