Added cPluginLua::cOperation.

This class should be used to lock-and-access the plugin's LuaState. cPluginLua::GetLuaState() is unsafe and by this commit obsolete.
master
madmaxoft 2014-02-10 20:38:02 +01:00
parent 1447d6d0dc
commit 5aa1123f70
1 changed files with 27 additions and 1 deletions

View File

@ -35,7 +35,33 @@ class cPluginLua :
public:
// tolua_end
cPluginLua( const AString & a_PluginDirectory );
/** A RAII-style mutex lock for accessing the internal LuaState.
This will be the only way to retrieve the plugin's LuaState;
therefore it directly supports accessing the LuaState of the locked plugin.
Usage:
cPluginLua::cOperation Op(SomePlugin);
Op().Call(...) // Call a function in the plugin's LuaState
*/
class cOperation
{
public:
cOperation(cPluginLua & a_Plugin) :
m_Plugin(a_Plugin),
m_Lock(a_Plugin.m_CriticalSection)
{
}
cLuaState & operator ()(void) { return m_Plugin.m_LuaState; }
protected:
cPluginLua & m_Plugin;
/** RAII lock for m_Plugin.m_CriticalSection */
cCSLock m_Lock;
} ;
cPluginLua(const AString & a_PluginDirectory);
~cPluginLua();
virtual void OnDisable(void) override;