summaryrefslogtreecommitdiff
path: root/src/script/scripting_mainmenu.cpp
diff options
context:
space:
mode:
authorsapier <Sapier at GMX dot net>2013-11-26 18:15:31 +0100
committersapier <Sapier at GMX dot net>2013-11-29 22:09:14 +0100
commit2e66aca35722e7fee786027d545fe371786fc01f (patch)
treef6d3ec721d23680bb493bd66054379b9327a1c7a /src/script/scripting_mainmenu.cpp
parentb08d7558de53325d184b3ddf0476cb84fc08d0ad (diff)
downloadminetest-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.cpp24
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);
}