Fixed ClientHandle not getting properly removed from the world

when socket is closed whilst the client is being added to the world
Fixes #1969
This commit is contained in:
tycho 2015-05-25 11:10:26 +01:00
parent c3c30a78e1
commit 31b95afd79

View File

@ -2957,13 +2957,20 @@ void cClientHandle::PacketError(UInt32 a_PacketType)
void cClientHandle::SocketClosed(void) void cClientHandle::SocketClosed(void)
{ {
// The socket has been closed for any reason // The socket has been closed for any reason
if (!m_Username.empty()) // Ignore client pings if (!m_Username.empty()) // Ignore client pings
{ {
LOGD("Client %s @ %s disconnected", m_Username.c_str(), m_IPString.c_str()); LOGD("Client %s @ %s disconnected", m_Username.c_str(), m_IPString.c_str());
cRoot::Get()->GetPluginManager()->CallHookDisconnect(*this, "Player disconnected"); cRoot::Get()->GetPluginManager()->CallHookDisconnect(*this, "Player disconnected");
} }
if (m_State < csDestroying)
{
cWorld * World = m_Player->GetWorld();
if (World != nullptr)
{
World->RemovePlayer(m_Player, true); // Must be called before cPlayer::Destroy() as otherwise cChunk tries to delete the player, and then we do it again
}
}
Destroy(); Destroy();
} }