diff options
| author | oy <Tom_Adams@web.de> | 2010-12-16 03:29:08 +0100 |
|---|---|---|
| committer | oy <Tom_Adams@web.de> | 2010-12-16 03:29:08 +0100 |
| commit | 0121f273112624d531d57fb37cb1bdf9e7c537df (patch) | |
| tree | ed517e71def6310b13e2ab491ce1b6bee4ac904d /src/engine/server | |
| parent | 54f138f89445def6060209d21f153b1e5378d58d (diff) | |
| download | zcatch-0121f273112624d531d57fb37cb1bdf9e7c537df.tar.gz zcatch-0121f273112624d531d57fb37cb1bdf9e7c537df.zip | |
fixed server crash on too many snap items. Closes #317
Diffstat (limited to 'src/engine/server')
| -rw-r--r-- | src/engine/server/server.cpp | 6 |
1 files changed, 5 insertions, 1 deletions
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) |