diff options
author | Shauren <shauren.trinity@gmail.com> | 2014-12-24 13:48:52 +0100 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2014-12-24 13:48:52 +0100 |
commit | 911d0cf400b8e06def13e649cc7415bfd288f742 (patch) | |
tree | a384b371f0ec08ea0c0be39d4d3070b516319e0d /src/server/bnetserver/Server/SessionManager.cpp | |
parent | c57171041b31da644b743ab811513baa05c85331 (diff) |
Core/Battle.net: Fixed client crashes happening when reconnecting too soon after being kicked
Diffstat (limited to 'src/server/bnetserver/Server/SessionManager.cpp')
-rw-r--r-- | src/server/bnetserver/Server/SessionManager.cpp | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/src/server/bnetserver/Server/SessionManager.cpp b/src/server/bnetserver/Server/SessionManager.cpp index 9e5836dab8d..6c52ee477f1 100644 --- a/src/server/bnetserver/Server/SessionManager.cpp +++ b/src/server/bnetserver/Server/SessionManager.cpp @@ -46,7 +46,11 @@ void Battlenet::SessionManager::AddSession(Session* session) void Battlenet::SessionManager::RemoveSession(Session* session) { std::unique_lock<boost::shared_mutex> lock(_sessionMutex); - _sessions.erase({ session->GetAccountId(), session->GetGameAccountId() }); + auto itr = _sessions.find({ session->GetAccountId(), session->GetGameAccountId() }); + // Remove old session only if it was not overwritten by reconnecting + if (itr != _sessions.end() && itr->second == session) + _sessions.erase(itr); + _sessionsByAccountId[session->GetAccountId()].remove(session); } |