From e3a8b726398491dda69f688a5862af827f65df1b Mon Sep 17 00:00:00 2001 From: Glenn Maynard Date: Wed, 15 Jun 2005 08:16:28 +0000 Subject: [PATCH] lockable Lua object; "Lua" alias to replace "lua_State" --- stepmania/src/LuaManager.cpp | 17 +++++++++++++++++ stepmania/src/LuaManager.h | 7 +++++++ 2 files changed, 24 insertions(+) diff --git a/stepmania/src/LuaManager.cpp b/stepmania/src/LuaManager.cpp index d7e1bbf62c..644d7d70a2 100644 --- a/stepmania/src/LuaManager.cpp +++ b/stepmania/src/LuaManager.cpp @@ -5,6 +5,7 @@ #include "RageUtil.h" #include "RageLog.h" #include "RageFile.h" +#include "RageThreads.h" #include "arch/Dialog/Dialog.h" #include "Foreach.h" @@ -152,6 +153,7 @@ LuaManager::LuaManager() LUA = this; // so that LUA is available when we call the Register functions L = NULL; + m_pLock = new RageMutex( "Lua" ); ResetState(); } @@ -159,8 +161,23 @@ LuaManager::LuaManager() LuaManager::~LuaManager() { lua_close( L ); + delete m_pLock; } +Lua *LuaManager::Get() +{ + m_pLock->Lock(); + return L; +} + +void LuaManager::Release( Lua *&p ) +{ + ASSERT( p == L ); + m_pLock->Unlock(); + p = NULL; +} + + void LuaManager::RegisterTypes() { for( const LuaFunctionList *p = g_LuaFunctions; p; p=p->next ) diff --git a/stepmania/src/LuaManager.h b/stepmania/src/LuaManager.h index f27425cce7..0dc2c76a10 100644 --- a/stepmania/src/LuaManager.h +++ b/stepmania/src/LuaManager.h @@ -2,7 +2,9 @@ #define LUA_MANAGER_H struct lua_State; +typedef lua_State Lua; typedef void (*RegisterWithLuaFn)(lua_State*); +class RageMutex; extern "C" { @@ -49,6 +51,9 @@ public: LuaManager(); ~LuaManager(); + Lua *Get(); + void Release( Lua *&p ); + void PrepareExpression( CString &sInOut ); // strip "//" comments and "+" bool RunScriptFile( const CString &sFile ); @@ -96,6 +101,8 @@ public: lua_State *L; private: + RageMutex *m_pLock; + /* Register all subscribing types. There's no harm in registering when already registered. */ void RegisterTypes(); };