added second pass function

--HG--
extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%40218
This commit is contained in:
David Anderson 2006-12-15 13:53:58 +00:00
parent 8792f0b4f0
commit a9087b13dd
3 changed files with 25 additions and 7 deletions

View File

@ -164,6 +164,9 @@ void SourceModBase::DoGlobalPluginLoads()
GetSMBaseDir()); GetSMBaseDir());
g_PluginSys.LoadAll_FirstPass(config_path, plugins_path); 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() bool SourceModBase::IsLateLoadInMap()

View File

@ -444,7 +444,7 @@ bool CPlugin::SetPauseState(bool paused)
* PLUGIN ITERATOR * * PLUGIN ITERATOR *
*******************/ *******************/
CPluginManager::CPluginIterator::CPluginIterator(List<IPlugin *> *_mylist) CPluginManager::CPluginIterator::CPluginIterator(List<CPlugin *> *_mylist)
{ {
mylist = _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 */ /* First read in the database of plugin settings */
SMCParseError err; SMCParseError err;
@ -730,6 +730,21 @@ void CPluginManager::AddPlugin(CPlugin *pPlugin)
} }
} }
void CPluginManager::LoadAll_SecondPass()
{
List<CPlugin *>::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) void CPluginManager::RunSecondPass(CPlugin *pPlugin)
{ {
/* Tell this plugin to finish initializing itself */ /* Tell this plugin to finish initializing itself */
@ -776,7 +791,7 @@ bool CPluginManager::UnloadPlugin(IPlugin *plugin)
pListener->OnPluginDestroyed(pPlugin); pListener->OnPluginDestroyed(pPlugin);
} }
m_plugins.remove(plugin); m_plugins.remove(pPlugin);
sm_trie_delete(m_LoadLookup, pPlugin->m_filename); sm_trie_delete(m_LoadLookup, pPlugin->m_filename);
delete pPlugin; delete pPlugin;

View File

@ -161,7 +161,7 @@ public:
class CPluginIterator : public IPluginIterator class CPluginIterator : public IPluginIterator
{ {
public: public:
CPluginIterator(List<IPlugin *> *mylist); CPluginIterator(List<CPlugin *> *mylist);
virtual ~CPluginIterator(); virtual ~CPluginIterator();
virtual bool MorePlugins(); virtual bool MorePlugins();
virtual IPlugin *GetPlugin(); virtual IPlugin *GetPlugin();
@ -170,8 +170,8 @@ public:
public: public:
void Reset(); void Reset();
private: private:
List<IPlugin *> *mylist; List<CPlugin *> *mylist;
List<IPlugin *>::iterator current; List<CPlugin *>::iterator current;
}; };
friend class CPluginManager::CPluginIterator; friend class CPluginManager::CPluginIterator;
public: //IPluginManager public: //IPluginManager
@ -252,7 +252,7 @@ protected:
void ReleaseFunctionToPool(CFunction *func); void ReleaseFunctionToPool(CFunction *func);
private: private:
List<IPluginsListener *> m_listeners; List<IPluginsListener *> m_listeners;
List<IPlugin *> m_plugins; List<CPlugin *> m_plugins;
List<sp_nativeinfo_t *> m_natives; List<sp_nativeinfo_t *> m_natives;
CStack<CPluginManager::CPluginIterator *> m_iters; CStack<CPluginManager::CPluginIterator *> m_iters;
CStack<CFunction *> m_funcpool; CStack<CFunction *> m_funcpool;