about summary refs log tree commit diff
path: root/src/engine/server
diff options
context:
space:
mode:
authoroy <Tom_Adams@web.de>2010-12-16 03:29:08 +0100
committeroy <Tom_Adams@web.de>2010-12-16 03:29:08 +0100
commit0121f273112624d531d57fb37cb1bdf9e7c537df (patch)
treeed517e71def6310b13e2ab491ce1b6bee4ac904d /src/engine/server
parent54f138f89445def6060209d21f153b1e5378d58d (diff)
downloadzcatch-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.cpp6
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)