From 7bc8ed87d090d4cdfdd5e654ffd167dc54aead85 Mon Sep 17 00:00:00 2001 From: NiLuJe Date: Fri, 25 Dec 2020 00:38:31 +0100 Subject: [PATCH] kodev: Avoid catchsegv via -S, --no-catchsegv (#7044) This works around #7036 on my end (so far). * Turns out we can actually ask os.exit to close the Lua state, wheee! Thanks @Frenzie ;). --- kodev | 28 +++++++++++----------------- reader.lua | 19 +++---------------- 2 files changed, 14 insertions(+), 33 deletions(-) diff --git a/kodev b/kodev index 688d4e897..f38456c15 100755 --- a/kodev +++ b/kodev @@ -621,7 +621,7 @@ OPTIONS: -p, --graph graph memory use (requires gnuplot) -v X, --valgrind=X run with valgrind (default: \"valgrind --tool=memcheck --trace-children=yes --leak-check=full --track-origins=yes --show-reachable=yes\") -c, --callgrind run with valgrind's callgrind (valgrind --tool=callgrind --trace-children=yes) - -r, --sane-return force KOReader to exit sanely, instead of calling os.exit. This ensures a saner teardown of the Lua state. (enabled by default when running under valgrind/gdb). + -S, --no-catchsegv prevents wrapping by catchsegv TARGET: @@ -638,8 +638,8 @@ TARGET: declare opt declare -r E_OPTERR=85 - declare -r short_opts="tbng::pv::cw:h:d:s:rH" - declare -r long_opts="disable-touch,no-build,gdb::,graph,valgrind::,callgrind,screen-width:,screen-height:,screen-dpi:,simulate:,sane-return,help" + declare -r short_opts="tbng::pv::cw:h:d:s:SH" + declare -r long_opts="disable-touch,no-build,gdb::,graph,valgrind::,callgrind,screen-width:,screen-height:,screen-dpi:,simulate:,no-catchsegv,help" if ! opt=$(getopt -o "${short_opts}" --long "${long_opts}" --name "kodev" -- "${@}"); then echo "${RUN_HELP_MSG}" @@ -663,7 +663,6 @@ TARGET: export KODEBUG= ;; -g | --gdb) - export SANE_RETURN=1 if [ -n "${VALUE}" ]; then gdb="${VALUE}" else @@ -691,7 +690,6 @@ TARGET: graph_memory=1 ;; -v | --valgrind) - export SANE_RETURN=1 if [ -n "${VALUE}" ]; then valgrind="${VALUE}" else @@ -706,7 +704,6 @@ TARGET: shift ;; -c | --callgrind) - export SANE_RETURN=1 # Try to use sensible defaults for valgrind if command -v valgrind >/dev/null; then valgrind="valgrind --tool=callgrind --trace-children=yes" @@ -778,8 +775,8 @@ TARGET: esac shift ;; - -r | --sane-return) - export SANE_RETURN=1 + -S | --no-catchsegv) + no_catchsegv=1 ;; -H | --help) echo "${RUN_HELP_MSG}" @@ -841,18 +838,15 @@ TARGET: gnuplot_wrapper "--parent $$" "reader.lua" fi - if [ -n "${SANE_RETURN}" ]; then - KOREADER_ARGS="-d -t" - else - KOREADER_ARGS="-d" - fi - + KOREADER_ARGS="-d" KOREADER_COMMAND="env LD_LIBRARY_PATH=${KO_LD_LIBRARY_PATH} ./reader.lua ${KOREADER_ARGS}" - # run with catchsegv by default when it is available + # run with catchsegv by default when it is available (unless no-catchsegv is enabled, c.f., #7036) # see https://github.com/koreader/koreader/issues/2878#issuecomment-326796777 - if command -v catchsegv >/dev/null; then - KOREADER_COMMAND="$(command -v catchsegv) ${KOREADER_COMMAND}" + if [ -z "${no_catchsegv}" ]; then + if command -v catchsegv >/dev/null; then + KOREADER_COMMAND="$(command -v catchsegv) ${KOREADER_COMMAND}" + fi fi if [ -n "${valgrind}" ]; then diff --git a/reader.lua b/reader.lua index 599cc3ace..3e02ddfff 100755 --- a/reader.lua +++ b/reader.lua @@ -65,7 +65,6 @@ local longopts = { debug = "d", verbose = "d", profile = "p", - teardown = "t", help = "h", } @@ -76,7 +75,6 @@ local function showusage() print("-d start in debug mode") print("-v debug in verbose mode") print("-p enable Lua code profiling") - print("-t teardown via a return instead of calling os.exit") print("-h show this usage help") print("") print("If you give the name of a directory instead of a file path, a file") @@ -89,7 +87,6 @@ local function showusage() end local Profiler = nil -local sane_teardown local ARGV = arg local argidx = 1 while argidx <= #ARGV do @@ -111,8 +108,6 @@ while argidx <= #ARGV do elseif arg == "-p" then Profiler = require("jit.p") Profiler.start("la") - elseif arg == "-t" then - sane_teardown = true else -- not a recognized option, should be a filename argidx = argidx - 1 @@ -353,18 +348,10 @@ local function exitReader() if type(exit_code) == "number" then return exit_code else - return 0 + return true end end local ret = exitReader() - -if not sane_teardown then - os.exit(ret) -else - -- NOTE: We can unfortunately not return with a custom exit code... - -- But since this should only really be used on the emulator, - -- to ensure a saner teardown of ressources when debugging, - -- it's not a great loss... - return -end +-- Close the Lua state on exit +os.exit(ret, true)