From c5400b010783f5e695569163b0ad42afb123b4f8 Mon Sep 17 00:00:00 2001
From: Andrei Karas <akaras@inbox.ru>
Date: Sat, 19 Jul 2014 20:26:11 +0300
Subject: Fix memory leak in ipc on client exit.

---
 src/net/ipc.cpp | 17 +++++++++++++----
 1 file changed, 13 insertions(+), 4 deletions(-)

(limited to 'src/net')

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-70-g09d2