From 7c302e9c4c30da4506fe60ea57373301c08da15e Mon Sep 17 00:00:00 2001 From: Kim Alvefur Date: Sun, 22 Jan 2023 14:42:07 +0100 Subject: util.prosodyctl.shell: Close state on exit to fix saving shell history This ensures a last round of garbage collection and finalizers, which should include flushing the readline history file. Test procedure: ``` $ ./prosodyctl shell prosody> s2s:show() -- any command that is not the last in history ... output prosody> bye $ ./prosodyctl shell prosody> ^P ``` After this, the shell prompt should contain the last command from before the "bye". Before this patch, recent history is gone most of the time. --- util/prosodyctl/shell.lua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/util/prosodyctl/shell.lua b/util/prosodyctl/shell.lua index bce27b94..8cf7df69 100644 --- a/util/prosodyctl/shell.lua +++ b/util/prosodyctl/shell.lua @@ -39,7 +39,7 @@ local function repl(client) if have_readline then readline.save_history(); end - os.exit(); + os.exit(0, true); end send_line(client, line); end @@ -112,7 +112,7 @@ local function start(arg) --luacheck: ignore 212/arg client.events.add_handler("disconnected", function () print("--- session closed ---"); - os.exit(); + os.exit(0, true); end); client.events.add_handler("received", function (stanza) -- cgit v1.2.3 From 435e008568a0590f89e3b6477b9d6ded3ac024b4 Mon Sep 17 00:00:00 2001 From: Kim Alvefur Date: Sun, 22 Jan 2023 14:45:47 +0100 Subject: util.startup: Close state on exit to ensure GC finalizers are called Ensures a last round of garbage collection and that finalizers are called. Fixes things like proper closing of SQLite3 state. There are more calls to os.exit() but most of them exit with an error or in a case where a final GC sweep might not matter as much. It would be nice if this was the default. Calling util.statup.exit() everywhere may be sensible, but would be more involved, requiring imports everywhere. --- prosodyctl | 8 ++++---- util/startup.lua | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/prosodyctl b/prosodyctl index 4e4099d5..35c06220 100755 --- a/prosodyctl +++ b/prosodyctl @@ -663,11 +663,11 @@ local command_runner = async.runner(function () local ok, ret = modulemanager.call_module_method(module, "command", arg); if ok then if type(ret) == "number" then - os.exit(ret); + os.exit(ret, true); elseif type(ret) == "string" then show_message(ret); end - os.exit(0); -- :) + os.exit(0, true); -- :) else show_message("Failed to execute command: "..error_messages[ret]); os.exit(1); -- :( @@ -745,10 +745,10 @@ local command_runner = async.runner(function () end - os.exit(0); + os.exit(0, true); end - os.exit(commands[command](arg)); + os.exit(commands[command](arg), true); end, watchers); command_runner:run(true); diff --git a/util/startup.lua b/util/startup.lua index 10ff1875..545b6ae7 100644 --- a/util/startup.lua +++ b/util/startup.lua @@ -648,7 +648,7 @@ function startup.shutdown() end function startup.exit() - os.exit(prosody.shutdown_code); + os.exit(prosody.shutdown_code, true); end -- prosodyctl only -- cgit v1.2.3