Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

kodev: Avoid catchsegv via -S, --no-catchsegv #7044

Merged
merged 4 commits into from
Dec 24, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
28 changes: 11 additions & 17 deletions kodev
Original file line number Diff line number Diff line change
Expand Up @@ -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:

Expand All @@ -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}"
Expand All @@ -663,7 +663,6 @@ TARGET:
export KODEBUG=
;;
-g | --gdb)
export SANE_RETURN=1
if [ -n "${VALUE}" ]; then
gdb="${VALUE}"
else
Expand Down Expand Up @@ -691,7 +690,6 @@ TARGET:
graph_memory=1
;;
-v | --valgrind)
export SANE_RETURN=1
if [ -n "${VALUE}" ]; then
valgrind="${VALUE}"
else
Expand All @@ -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"
Expand Down Expand Up @@ -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}"
Expand Down Expand Up @@ -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
Expand Down
19 changes: 3 additions & 16 deletions reader.lua
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,6 @@ local longopts = {
debug = "d",
verbose = "d",
profile = "p",
teardown = "t",
help = "h",
}

Expand All @@ -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")
Expand All @@ -89,7 +87,6 @@ local function showusage()
end

local Profiler = nil
local sane_teardown
local ARGV = arg
local argidx = 1
while argidx <= #ARGV do
Expand All @@ -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
Expand Down Expand Up @@ -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)