From 0121f273112624d531d57fb37cb1bdf9e7c537df Mon Sep 17 00:00:00 2001 From: oy Date: Thu, 16 Dec 2010 03:29:08 +0100 Subject: fixed server crash on too many snap items. Closes #317 --- src/engine/server/server.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'src/engine') diff --git a/src/engine/server/server.cpp b/src/engine/server/server.cpp index e45ea846..299919dd 100644 --- a/src/engine/server/server.cpp +++ b/src/engine/server/server.cpp @@ -115,6 +115,8 @@ int CSnapIDPool::NewID() int Id = m_FirstFree; dbg_assert(Id != -1, "id error"); + if(Id == -1) + return Id; m_FirstFree = m_aIDs[m_FirstFree].m_Next; m_aIDs[Id].m_State = 1; m_Usage++; @@ -131,6 +133,8 @@ void CSnapIDPool::TimeoutIDs() void CSnapIDPool::FreeID(int Id) { + if(Id < 0) + return; dbg_assert(m_aIDs[Id].m_State == 1, "id is not alloced"); m_InUsage--; @@ -1481,7 +1485,7 @@ void *CServer::SnapNewItem(int Type, int Id, int Size) { dbg_assert(Type >= 0 && Type <=0xffff, "incorrect type"); dbg_assert(Id >= 0 && Id <=0xffff, "incorrect id"); - return m_SnapshotBuilder.NewItem(Type, Id, Size); + return Id < 0 ? 0 : m_SnapshotBuilder.NewItem(Type, Id, Size); } void CServer::SnapSetStaticsize(int ItemType, int Size) -- cgit 1.4.1