From bcc4aea8dcd79df1fc44582aa8fa3fdd118aab85 Mon Sep 17 00:00:00 2001 From: Ykkrosh Date: Mon, 9 May 2005 02:29:33 +0000 Subject: [PATCH] Maybe fixed nasty memory corruption bug. This was SVN commit r2254. --- source/graphics/MapReader.cpp | 5 ++--- source/simulation/EntityManager.cpp | 13 +++++++++++++ source/simulation/EntityManager.h | 2 ++ 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/source/graphics/MapReader.cpp b/source/graphics/MapReader.cpp index 9252c2bbbc..6a23b3136a 100755 --- a/source/graphics/MapReader.cpp +++ b/source/graphics/MapReader.cpp @@ -182,9 +182,8 @@ int CMapReader::ApplyData() } } - // remove all existing entities (by recreating the entity manager) - delete &g_EntityManager; - new CEntityManager(); + // delete all existing entities + g_EntityManager.deleteAll(); // delete all remaining non-entity units pUnitMan->DeleteAll(); diff --git a/source/simulation/EntityManager.cpp b/source/simulation/EntityManager.cpp index 4af5ecbaad..ad2d191179 100755 --- a/source/simulation/EntityManager.cpp +++ b/source/simulation/EntityManager.cpp @@ -28,6 +28,19 @@ CEntityManager::~CEntityManager() delete( m_entities[i].m_entity ); } +void CEntityManager::deleteAll() +{ + m_extant = false; + for( int i = 0; i < MAX_HANDLES; i++ ) + if( m_entities[i].m_refcount ) + { + delete( m_entities[i].m_entity ); + m_entities[i].m_refcount = 0; + } + m_nextalloc = 0; + m_extant = true; +} + HEntity CEntityManager::create( CBaseEntity* base, CVector3D position, float orientation ) { assert( base ); diff --git a/source/simulation/EntityManager.h b/source/simulation/EntityManager.h index a054d3a5e1..5ed5e5f715 100755 --- a/source/simulation/EntityManager.h +++ b/source/simulation/EntityManager.h @@ -54,6 +54,8 @@ public: void TickAll(); void renderAll(); + void deleteAll(); + // Predicate functions typedef bool (*EntityPredicate)( CEntity* target, void* userdata );