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());
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()

View File

@ -444,7 +444,7 @@ bool CPlugin::SetPauseState(bool paused)
* PLUGIN ITERATOR *
*******************/
CPluginManager::CPluginIterator::CPluginIterator(List<IPlugin *> *_mylist)
CPluginManager::CPluginIterator::CPluginIterator(List<CPlugin *> *_mylist)
{
mylist = _mylist;
}
@ -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)
{
/* 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;

View File

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