Display Lua memory usage at the time of Out-of-Memory error
authorkwolekr <kwolekr@minetest.net>
Mon, 10 Aug 2015 05:38:09 +0000 (01:38 -0400)
committerkwolekr <kwolekr@minetest.net>
Mon, 10 Aug 2015 05:38:09 +0000 (01:38 -0400)
Also misc. minor cleanups

src/script/common/c_internal.cpp
src/script/cpp_api/s_async.cpp

index bebf6ee69812ca7b29ec9a3f53f89f0a62a4e9e8..0df0a72702055241842251a0ddf39e555b353436 100644 (file)
@@ -113,6 +113,11 @@ void script_error(lua_State *L, int pcall_result, const char *fxn)
        }
        err_msg += err_descr;
 
+       if (pcall_result == LUA_ERRMEM) {
+               err_msg += "\nCurrent Lua memory usage: "
+                       + itos(lua_gc(L, LUA_GCCOUNT, 0) >> 10) + " MB";
+       }
+
        throw LuaError(err_msg);
 }
 
@@ -145,7 +150,9 @@ void script_run_callbacks_f(lua_State *L, int nargs,
        // Stack now looks like this:
        // ... <error handler> <run_callbacks> <table> <mode> <arg#1> <arg#2> ... <arg#n>
 
-       script_error(L, lua_pcall(L, nargs + 2, 1, errorhandler), fxn);
+       int result = lua_pcall(L, nargs + 2, 1, errorhandler);
+       if (result != 0)
+               script_error(L, result, fxn);
 
        lua_remove(L, -2); // Remove error handler
 }
@@ -161,8 +168,7 @@ void log_deprecated(lua_State *L, const std::string &message)
                std::string value = g_settings->get("deprecated_lua_api_handling");
                if (value == "log") {
                        dolog = true;
-               }
-               if (value == "error") {
+               } else if (value == "error") {
                        dolog = true;
                        doerror = true;
                }
index 0e2a006cae47754baf9dab747c022fb21e882bf6..c00b22f986256f4dbca071332f82de95e1fa7ccf 100644 (file)
@@ -255,7 +255,7 @@ void* AsyncWorkerThread::Thread()
        std::string script = getServer()->getBuiltinLuaPath() + DIR_DELIM + "init.lua";
        if (!loadScript(script)) {
                errorstream
-                       << "AsyncWorkderThread execution of async base environment failed!"
+                       << "AsyncWorkerThread execution of async base environment failed!"
                        << std::endl;
                abort();
        }