From ae92c51155ada2816fc2fa9bbb13a4b27da68a49 Mon Sep 17 00:00:00 2001 From: ancientmarinerdev Date: Tue, 14 Feb 2023 19:03:48 +0000 Subject: [PATCH 1/3] Adding error handling to the mob step function --- mods/ENTITIES/mcl_mobs/api.lua | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/mods/ENTITIES/mcl_mobs/api.lua b/mods/ENTITIES/mcl_mobs/api.lua index 67b9149cd..76557d467 100644 --- a/mods/ENTITIES/mcl_mobs/api.lua +++ b/mods/ENTITIES/mcl_mobs/api.lua @@ -357,8 +357,7 @@ function mob_class:outside_limits() end end --- main mob function -function mob_class:on_step(dtime) +local function on_step_work (self, dtime) local pos = self.object:get_pos() if not pos then return end @@ -446,6 +445,31 @@ function mob_class:on_step(dtime) end end +local on_step_error_handler = function () + --lua_Debug ar; + --local L = lua_getfield(L, LUA_GLOBALSINDEX, "f"); + --lua_getinfo(L, ">S", &ar); + local info = debug.getinfo(1, "SnlufL") + + minetest.log("In the error handler") + minetest.log("debug.traceback: ".. tostring(debug.traceback())) + minetest.log("debug.short_src: ".. dump(debug.source)) + minetest.log("debug.short_src: ".. dump(info)) + --debug.traceback +end +-- main mob function +function mob_class:on_step(dtime) + local status, retVal = xpcall(on_step_work, on_step_error_handler, self, dtime) + if status then + --minetest.log("success. retVal: ".. tostring(retVal)) + return retVal + else + minetest.log("failed. error: ".. tostring(retVal)) + minetest.log("failed. status: ".. tostring(status)) + end + --return on_step_work(self, dtime) +end + local timer = 0 minetest.register_globalstep(function(dtime) timer = timer + dtime From 7c602ce82c75245157ca293949a5c4543b184902 Mon Sep 17 00:00:00 2001 From: ancientmarinerdev Date: Tue, 14 Feb 2023 20:04:04 +0000 Subject: [PATCH 2/3] Tidy up error handling. --- mods/ENTITIES/mcl_mobs/api.lua | 27 ++++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/mods/ENTITIES/mcl_mobs/api.lua b/mods/ENTITIES/mcl_mobs/api.lua index 76557d467..8fbdd9154 100644 --- a/mods/ENTITIES/mcl_mobs/api.lua +++ b/mods/ENTITIES/mcl_mobs/api.lua @@ -4,6 +4,7 @@ local math, vector, minetest, mcl_mobs = math, vector, minetest, mcl_mobs -- API for Mobs Redo: MineClone 2 Edition (MRM) local PATHFINDING = "gowp" +local CRASH_WARN_FREQUENCY = 60 -- Localize local S = minetest.get_translator("mcl_mobs") @@ -445,16 +446,24 @@ local function on_step_work (self, dtime) end end +local last_crash_warn_time = 0 + local on_step_error_handler = function () - --lua_Debug ar; - --local L = lua_getfield(L, LUA_GLOBALSINDEX, "f"); - --lua_getinfo(L, ">S", &ar); local info = debug.getinfo(1, "SnlufL") - minetest.log("In the error handler") - minetest.log("debug.traceback: ".. tostring(debug.traceback())) - minetest.log("debug.short_src: ".. dump(debug.source)) - minetest.log("debug.short_src: ".. dump(info)) + local current_time = os.time() + local time_since_warning = current_time - last_crash_warn_time + --minetest.log("previous_crash_time: " .. current_time) + --minetest.log("last_crash_time: " .. last_crash_warn_time) + --minetest.log("time_since_warning: " .. time_since_warning) + if time_since_warning > CRASH_WARN_FREQUENCY then + last_crash_warn_time = current_time + minetest.log("A game crashing bug was prevented. Please provide debug.log information to MineClone2 dev team for investigation. (Search for: --- Bug report start)") + end + minetest.log("action", "--- Bug report start (please provide a few lines before this also for context) ---") + minetest.log("action", "Stack trace: ".. tostring(debug.traceback())) + minetest.log("action", "Bug info: ".. dump(info)) + minetest.log("action", "--- Bug report end ---") --debug.traceback end -- main mob function @@ -464,8 +473,8 @@ function mob_class:on_step(dtime) --minetest.log("success. retVal: ".. tostring(retVal)) return retVal else - minetest.log("failed. error: ".. tostring(retVal)) - minetest.log("failed. status: ".. tostring(status)) + --minetest.log("failed. error: ".. tostring(retVal)) + --minetest.log("failed. status: ".. tostring(status)) end --return on_step_work(self, dtime) end From 4d61e320215c9646a7a47fcea007780ef3e2cddf Mon Sep 17 00:00:00 2001 From: ancientmarinerdev Date: Tue, 14 Feb 2023 21:56:55 +0000 Subject: [PATCH 3/3] Clean up error handling --- mods/ENTITIES/mcl_mobs/api.lua | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/mods/ENTITIES/mcl_mobs/api.lua b/mods/ENTITIES/mcl_mobs/api.lua index 8fbdd9154..35f56abcd 100644 --- a/mods/ENTITIES/mcl_mobs/api.lua +++ b/mods/ENTITIES/mcl_mobs/api.lua @@ -453,9 +453,11 @@ local on_step_error_handler = function () local current_time = os.time() local time_since_warning = current_time - last_crash_warn_time + --minetest.log("previous_crash_time: " .. current_time) --minetest.log("last_crash_time: " .. last_crash_warn_time) --minetest.log("time_since_warning: " .. time_since_warning) + if time_since_warning > CRASH_WARN_FREQUENCY then last_crash_warn_time = current_time minetest.log("A game crashing bug was prevented. Please provide debug.log information to MineClone2 dev team for investigation. (Search for: --- Bug report start)") @@ -464,19 +466,14 @@ local on_step_error_handler = function () minetest.log("action", "Stack trace: ".. tostring(debug.traceback())) minetest.log("action", "Bug info: ".. dump(info)) minetest.log("action", "--- Bug report end ---") - --debug.traceback end + -- main mob function function mob_class:on_step(dtime) local status, retVal = xpcall(on_step_work, on_step_error_handler, self, dtime) if status then - --minetest.log("success. retVal: ".. tostring(retVal)) return retVal - else - --minetest.log("failed. error: ".. tostring(retVal)) - --minetest.log("failed. status: ".. tostring(status)) end - --return on_step_work(self, dtime) end local timer = 0