From fafe37632b480bdb4295bd58ce5786733701f3e1 Mon Sep 17 00:00:00 2001 From: PyryM Date: Mon, 8 Aug 2022 15:38:23 -0400 Subject: [PATCH] secret patch: gracefully shutdown bgfx on quit prevents segfault on exit in Linux --- dist/scripts/core/core.t | 20 +++++++++++++++----- dist/scripts/gfx/common.t | 1 + 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/dist/scripts/core/core.t b/dist/scripts/core/core.t index a7144c28..ed06d80d 100644 --- a/dist/scripts/core/core.t +++ b/dist/scripts/core/core.t @@ -118,16 +118,26 @@ function truss.sleep(ms) truss.C.sleep(ms) end --- gracefully quit truss with an optional error code -function truss.quit(code) +-- the true quit function +local _quit_code +local function _truss_quit() + log.info("Shutdown: calling cleanup functions") for _, f in pairs(truss._cleanup_functions) do f() end - if code and type(code) == "number" then - truss.C.set_error(code) - log.info("Error code: [" .. tostring(code) .. "]") + if _quit_code and type(_quit_code) == "number" then + truss.C.set_error(_quit_code) + log.info("Error code: [" .. tostring(_quit_code) .. "]") end truss.C.stop_interpreter(TRUSS_ID) end +-- gracefully quit truss with an optional error code +function truss.quit(code) + log.info("Shutdown requested from Lua") + _quit_code = code + _core_update = _truss_quit + _fallback_update = _truss_quit +end + -- load an entire file into memory as a string (8-bit clean) function truss.load_string_from_file(filename) local temp = truss.C.load_file(filename) diff --git a/dist/scripts/gfx/common.t b/dist/scripts/gfx/common.t index 73279ef2..c4bbcc03 100644 --- a/dist/scripts/gfx/common.t +++ b/dist/scripts/gfx/common.t @@ -220,6 +220,7 @@ function m.init_gfx(options) bgfx.set_debug(debug) log.info("initted bgfx") + truss.on_quit(bgfx.shutdown) local backend_type = bgfx.get_renderer_type() if options.backend and (backend_type ~= renderer_type) then log.warn("Requested backend", options.backend, "is not available!")