summaryrefslogtreecommitdiff
path: root/src/net/ipc.cpp
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 /src/net/ipc.cpp
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.
Diffstat (limited to 'src/net/ipc.cpp')
-rw-r--r--src/net/ipc.cpp17
1 files changed, 13 insertions, 4 deletions
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()