From f6bab71d055ad0e1bf908ffcd79ca4398b07fdc5 Mon Sep 17 00:00:00 2001 From: Mattes D Date: Mon, 26 Jun 2017 09:11:30 +0200 Subject: Fixed memory leak in cClientHandle. (#3794) --- src/ClientHandle.cpp | 10 +++++----- src/ClientHandle.h | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/ClientHandle.cpp b/src/ClientHandle.cpp index fe85ddfb8..1b63153d2 100644 --- a/src/ClientHandle.cpp +++ b/src/ClientHandle.cpp @@ -95,7 +95,7 @@ cClientHandle::cClientHandle(const AString & a_IPString, int a_ViewDistance) : m_LastPlacedSign(0, -1, 0), m_ProtocolVersion(0) { - m_Protocol = new cProtocolRecognizer(this); + m_Protocol = cpp14::make_unique(this); s_ClientCount++; // Not protected by CS because clients are always constructed from the same thread m_UniqueID = s_ClientCount; @@ -143,8 +143,7 @@ cClientHandle::~cClientHandle() SendDisconnect("Server shut down? Kthnxbai"); } - delete m_Protocol; - m_Protocol = nullptr; + m_Protocol.reset(); LOGD("ClientHandle at %p deleted", static_cast(this)); } @@ -171,12 +170,13 @@ void cClientHandle::Destroy(void) } LOGD("%s: destroying client %p, \"%s\" @ %s", __FUNCTION__, static_cast(this), m_Username.c_str(), m_IPString.c_str()); + auto player = m_Player; + m_Self.reset(); { cCSLock lock(m_CSState); - m_State = csDestroyed; + m_State = csDestroyed; // Tick thread is allowed to call destructor async at any time after this } - auto player = m_Player; if (player != nullptr) { auto world = player->GetWorld(); diff --git a/src/ClientHandle.h b/src/ClientHandle.h index 0b51c50cd..4c37262c2 100644 --- a/src/ClientHandle.h +++ b/src/ClientHandle.h @@ -405,7 +405,7 @@ private: std::unordered_set m_ChunksToSend; // Chunks that need to be sent to the player (queued because they weren't generated yet or there's not enough time to send them) cChunkCoordsList m_SentChunks; // Chunks that are currently sent to the client - cProtocol * m_Protocol; + std::unique_ptr m_Protocol; /** Protects m_IncomingData against multithreaded access. */ cCriticalSection m_CSIncomingData; -- cgit v1.2.3