diff options
author | sapier <Sapier at GMX dot net> | 2013-11-26 18:15:31 +0100 |
---|---|---|
committer | sapier <Sapier at GMX dot net> | 2013-11-29 22:09:14 +0100 |
commit | 2e66aca35722e7fee786027d545fe371786fc01f (patch) | |
tree | f6d3ec721d23680bb493bd66054379b9327a1c7a /src/script/scripting_mainmenu.cpp | |
parent | b08d7558de53325d184b3ddf0476cb84fc08d0ad (diff) | |
download | minetest-2e66aca35722e7fee786027d545fe371786fc01f.tar.gz minetest-2e66aca35722e7fee786027d545fe371786fc01f.tar.bz2 minetest-2e66aca35722e7fee786027d545fe371786fc01f.zip |
Fix modstore/favourites hang by adding asynchronous lua job support
Diffstat (limited to 'src/script/scripting_mainmenu.cpp')
-rw-r--r-- | src/script/scripting_mainmenu.cpp | 24 |
1 files changed, 23 insertions, 1 deletions
diff --git a/src/script/scripting_mainmenu.cpp b/src/script/scripting_mainmenu.cpp index 31581a1bf..a4619e9da 100644 --- a/src/script/scripting_mainmenu.cpp +++ b/src/script/scripting_mainmenu.cpp @@ -28,8 +28,9 @@ with this program; if not, write to the Free Software Foundation, Inc., extern "C" { #include "lualib.h" + int luaopen_marshal(lua_State *L); } - +/******************************************************************************/ MainMenuScripting::MainMenuScripting(GUIEngine* guiengine) { setGuiEngine(guiengine); @@ -37,6 +38,7 @@ MainMenuScripting::MainMenuScripting(GUIEngine* guiengine) //TODO add security luaL_openlibs(getStack()); + luaopen_marshal(getStack()); SCRIPTAPI_PRECHECKHEADER @@ -58,6 +60,7 @@ MainMenuScripting::MainMenuScripting(GUIEngine* guiengine) infostream << "SCRIPTAPI: initialized mainmenu modules" << std::endl; } +/******************************************************************************/ void MainMenuScripting::InitializeModApi(lua_State *L, int top) { // Initialize mod api modules @@ -66,4 +69,23 @@ void MainMenuScripting::InitializeModApi(lua_State *L, int top) // Register reference classes (userdata) LuaSettings::Register(L); + + // Register functions to async environment + ModApiMainMenu::InitializeAsync(m_AsyncEngine); + ModApiUtil::InitializeAsync(m_AsyncEngine); + + // Initialize async environment + //TODO possibly make number of async threads configurable + m_AsyncEngine.Initialize(MAINMENU_NUMBER_OF_ASYNC_THREADS); +} + +/******************************************************************************/ +void MainMenuScripting::Step() { + m_AsyncEngine.Step(getStack()); +} + +/******************************************************************************/ +unsigned int MainMenuScripting::DoAsync(std::string serialized_fct, + std::string serialized_params) { + return m_AsyncEngine.doAsyncJob(serialized_fct,serialized_params); } |