added second pass function
--HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%40218
This commit is contained in:
parent
8792f0b4f0
commit
a9087b13dd
@ -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()
|
||||||
|
@ -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;
|
||||||
|
@ -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;
|
||||||
|
Loading…
Reference in New Issue
Block a user