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.
--- a/prosodyctl Sun Jan 22 14:42:07 2023 +0100
+++ b/prosodyctl Sun Jan 22 14:45:47 2023 +0100
@@ -663,11 +663,11 @@
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 @@
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);
--- a/util/startup.lua Sun Jan 22 14:42:07 2023 +0100
+++ b/util/startup.lua Sun Jan 22 14:45:47 2023 +0100
@@ -648,7 +648,7 @@
end
function startup.exit()
- os.exit(prosody.shutdown_code);
+ os.exit(prosody.shutdown_code, true);
end
-- prosodyctl only