1
0
Fork 0

Fixed wrong assumtion regarding RemoveClient

Remove client can be called with a client that is not present in the chunk
This commit is contained in:
tycho 2015-09-19 17:22:57 +01:00
parent 553c695fd2
commit a0519a487a
2 changed files with 6 additions and 4 deletions

View File

@ -1885,7 +1885,11 @@ bool cChunk::AddClient(cClientHandle * a_Client)
void cChunk::RemoveClient(cClientHandle * a_Client)
{
m_LoadedByClient.erase(std::remove(m_LoadedByClient.begin(), m_LoadedByClient.end(), a_Client));
auto itr = std::remove(m_LoadedByClient.begin(), m_LoadedByClient.end(), a_Client);
// We should always remove at most one client.
ASSERT(std::distance(itr, m_LoadedByClient.end()) <= 1);
// Note: itr can equal m_LoadedByClient.end()
m_LoadedByClient.erase(itr, m_LoadedByClient.end());
if (!a_Client->IsDestroyed())
{

View File

@ -441,9 +441,7 @@ public:
// Makes a copy of the list
cClientHandleList GetAllClients(void) const
{
cClientHandleList copy;
std::copy(m_LoadedByClient.begin(), m_LoadedByClient.end(), std::back_inserter(copy));
return copy;
return cClientHandleList(m_LoadedByClient.begin(), m_LoadedByClient.end());
}
private: