diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/ClientHandle.cpp | 10 | ||||
-rw-r--r-- | 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<cProtocolRecognizer>(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<void *>(this)); } @@ -171,12 +170,13 @@ void cClientHandle::Destroy(void) } LOGD("%s: destroying client %p, \"%s\" @ %s", __FUNCTION__, static_cast<void *>(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<cChunkCoords, cChunkCoordsHash> 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<cProtocol> m_Protocol; /** Protects m_IncomingData against multithreaded access. */ cCriticalSection m_CSIncomingData; |