From a9087b13dd41757f48f61212f41fc41c6bc0d85d Mon Sep 17 00:00:00 2001 From: David Anderson Date: Fri, 15 Dec 2006 13:53:58 +0000 Subject: [PATCH] added second pass function --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%40218 --- core/sourcemod.cpp | 3 +++ core/systems/PluginSys.cpp | 21 ++++++++++++++++++--- core/systems/PluginSys.h | 8 ++++---- 3 files changed, 25 insertions(+), 7 deletions(-) diff --git a/core/sourcemod.cpp b/core/sourcemod.cpp index f8d544dd..0e42de2d 100644 --- a/core/sourcemod.cpp +++ b/core/sourcemod.cpp @@ -164,6 +164,9 @@ void SourceModBase::DoGlobalPluginLoads() GetSMBaseDir()); g_PluginSys.LoadAll_FirstPass(config_path, plugins_path); + + /* No modules yet, it's safe to call this from here */ + g_PluginSys.LoadAll_SecondPass(); } bool SourceModBase::IsLateLoadInMap() diff --git a/core/systems/PluginSys.cpp b/core/systems/PluginSys.cpp index 9cbc5f74..db274911 100644 --- a/core/systems/PluginSys.cpp +++ b/core/systems/PluginSys.cpp @@ -444,7 +444,7 @@ bool CPlugin::SetPauseState(bool paused) * PLUGIN ITERATOR * *******************/ -CPluginManager::CPluginIterator::CPluginIterator(List *_mylist) +CPluginManager::CPluginIterator::CPluginIterator(List *_mylist) { mylist = _mylist; } @@ -495,7 +495,7 @@ CPluginManager::~CPluginManager() } -void CPluginManager::LoadAll_FirstPass( const char *config, const char *basedir ) +void CPluginManager::LoadAll_FirstPass(const char *config, const char *basedir) { /* First read in the database of plugin settings */ SMCParseError err; @@ -730,6 +730,21 @@ void CPluginManager::AddPlugin(CPlugin *pPlugin) } } +void CPluginManager::LoadAll_SecondPass() +{ + List::iterator iter; + CPlugin *pPlugin; + + for (iter=m_plugins.begin(); iter!=m_plugins.end(); iter++) + { + pPlugin = (*iter); + if (pPlugin->GetStatus() == Plugin_Loaded) + { + RunSecondPass(pPlugin); + } + } +} + void CPluginManager::RunSecondPass(CPlugin *pPlugin) { /* Tell this plugin to finish initializing itself */ @@ -776,7 +791,7 @@ bool CPluginManager::UnloadPlugin(IPlugin *plugin) pListener->OnPluginDestroyed(pPlugin); } - m_plugins.remove(plugin); + m_plugins.remove(pPlugin); sm_trie_delete(m_LoadLookup, pPlugin->m_filename); delete pPlugin; diff --git a/core/systems/PluginSys.h b/core/systems/PluginSys.h index 44856ce9..22cd8d1b 100644 --- a/core/systems/PluginSys.h +++ b/core/systems/PluginSys.h @@ -161,7 +161,7 @@ public: class CPluginIterator : public IPluginIterator { public: - CPluginIterator(List *mylist); + CPluginIterator(List *mylist); virtual ~CPluginIterator(); virtual bool MorePlugins(); virtual IPlugin *GetPlugin(); @@ -170,8 +170,8 @@ public: public: void Reset(); private: - List *mylist; - List::iterator current; + List *mylist; + List::iterator current; }; friend class CPluginManager::CPluginIterator; public: //IPluginManager @@ -252,7 +252,7 @@ protected: void ReleaseFunctionToPool(CFunction *func); private: List m_listeners; - List m_plugins; + List m_plugins; List m_natives; CStack m_iters; CStack m_funcpool;