mirror of
https://github.com/koreader/koreader.git
synced 2025-08-10 00:52:38 +00:00
Allow optionally returning via a return from main, instead of calling
os.exit. This ensures a saner teardown of the Lua state, which is mildly helpful when instrumenting a run... (e.g., there's a final GC cycle, among other things).
This commit is contained in:
22
reader.lua
22
reader.lua
@@ -53,7 +53,9 @@ if G_reader_settings:isTrue("debug") and G_reader_settings:isTrue("debug_verbose
|
||||
-- Option parsing:
|
||||
local longopts = {
|
||||
debug = "d",
|
||||
verbose = "d",
|
||||
profile = "p",
|
||||
teardown = "t",
|
||||
help = "h",
|
||||
}
|
||||
|
||||
@@ -64,6 +66,7 @@ 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")
|
||||
@@ -76,6 +79,7 @@ local function showusage()
|
||||
end
|
||||
|
||||
local Profiler = nil
|
||||
local sane_teardown
|
||||
local ARGV = arg
|
||||
local argidx = 1
|
||||
while argidx <= #ARGV do
|
||||
@@ -97,6 +101,8 @@ 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
|
||||
@@ -335,10 +341,20 @@ local function exitReader()
|
||||
if Profiler then Profiler.stop() end
|
||||
|
||||
if type(exit_code) == "number" then
|
||||
os.exit(exit_code)
|
||||
return exit_code
|
||||
else
|
||||
os.exit(0)
|
||||
return 0
|
||||
end
|
||||
end
|
||||
|
||||
exitReader()
|
||||
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
|
||||
|
||||
Reference in New Issue
Block a user