Fixed a lot of memory leaks caused by static globals never getting

deleted and some other objects not getting deleted properly due to missing
destructors.
This commit is contained in:
Shenjoku
2013-04-18 21:17:57 -07:00
parent 5f7001ef0a
commit 01456ed0b9
29 changed files with 239 additions and 171 deletions
+12 -5
View File
@@ -5,18 +5,25 @@
#include "Foreach.h"
#include "SubscriptionManager.h"
static SubscriptionManager<LuaBinding> m_Subscribers;
SubscriptionManager<LuaBinding> & GetSubscribers()
{
static SubscriptionManager<LuaBinding> subscribers;
return subscribers;
}
namespace
{
void RegisterTypes( lua_State *L )
{
if( m_Subscribers.m_pSubscribers == NULL )
SubscriptionManager<LuaBinding> & subscribers = GetSubscribers();
if( subscribers.m_pSubscribers.empty() )
return;
/* Register base classes first. */
map<RString, LuaBinding *> mapToRegister;
FOREACHS( LuaBinding*, *m_Subscribers.m_pSubscribers, p )
FOREACHS( LuaBinding*, subscribers.m_pSubscribers, p )
mapToRegister[(*p)->GetClassName()] = (*p);
set<RString> setRegisteredAlready;
@@ -59,12 +66,12 @@ REGISTER_WITH_LUA_FUNCTION( RegisterTypes );
LuaBinding::LuaBinding()
{
m_Subscribers.Subscribe( this );
GetSubscribers().Subscribe( this );
}
LuaBinding::~LuaBinding()
{
m_Subscribers.Unsubscribe( this );
GetSubscribers().Unsubscribe( this );
}
void LuaBinding::Register( lua_State *L )