summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrei Karas <akaras@inbox.ru>2014-07-19 20:26:11 +0300
committerAndrei Karas <akaras@inbox.ru>2014-07-19 20:26:11 +0300
commitc5400b010783f5e695569163b0ad42afb123b4f8 (patch)
tree9f558a1f80b20562017e8ee081b6d854af8c71b5
parenteff2fe4be9a25e6f870967d1a5e492c05f6b0abd (diff)
downloadmanaplus-c5400b010783f5e695569163b0ad42afb123b4f8.tar.gz
manaplus-c5400b010783f5e695569163b0ad42afb123b4f8.tar.bz2
manaplus-c5400b010783f5e695569163b0ad42afb123b4f8.tar.xz
manaplus-c5400b010783f5e695569163b0ad42afb123b4f8.zip
Fix memory leak in ipc on client exit.
-rw-r--r--src/client.cpp3
-rw-r--r--src/net/ipc.cpp17
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()