From c5400b010783f5e695569163b0ad42afb123b4f8 Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Sat, 19 Jul 2014 20:26:11 +0300 Subject: Fix memory leak in ipc on client exit. --- src/client.cpp | 3 +++ src/net/ipc.cpp | 17 +++++++++++++---- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/src/client.cpp b/src/client.cpp index 36dd0536c..e620b0a51 100644 --- a/src/client.cpp +++ b/src/client.cpp @@ -83,6 +83,7 @@ #include "net/generalhandler.h" #include "net/guildhandler.h" #include "net/inventoryhandler.h" +#include "net/ipc.h" #include "net/loginhandler.h" #include "net/net.h" #include "net/netconsts.h" @@ -624,6 +625,8 @@ void Client::gameClear() if (Net::getChatHandler()) Net::getChatHandler()->clear(); + delete2(ipc); + #ifdef USE_MUMBLE delete2(mumbleManager); #endif diff --git a/src/net/ipc.cpp b/src/net/ipc.cpp index 6d7c2c45b..0c6b36a3b 100644 --- a/src/net/ipc.cpp +++ b/src/net/ipc.cpp @@ -47,6 +47,16 @@ IPC::IPC() : IPC::~IPC() { + mListen = false; + if (mSocket) + { + TcpNet::closeSocket(mSocket); + mSocket = nullptr; + } + int status; + if (mThread && SDL_GetThreadID(mThread)) + SDL_WaitThread(mThread, &status); + mThread = nullptr; } bool IPC::init() @@ -127,6 +137,8 @@ int IPC::acceptLoop(void *ptr) TcpNet::closeSocket(sock); } TcpNet::closeSocket(ipc1->mSocket); + ipc1->mSocket = nullptr; + ipc->mThread = nullptr; return 0; } @@ -136,10 +148,7 @@ void IPC::stop() return; logger->log("Stopping IPC..."); - ipc->mListen = false; - int loopRet; - SDL_WaitThread(ipc->mThread, &loopRet); - ipc = nullptr; + delete2(ipc); } void IPC::start() -- cgit v1.2.3-60-g2f50