aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKim Alvefur <zash@zash.se>2023-01-22 14:45:47 +0100
committerKim Alvefur <zash@zash.se>2023-01-22 14:45:47 +0100
commit435e008568a0590f89e3b6477b9d6ded3ac024b4 (patch)
treeaf9d39f9bc0b404ab867135c6e82420b3c522a27
parent7c302e9c4c30da4506fe60ea57373301c08da15e (diff)
downloadprosody-435e008568a0590f89e3b6477b9d6ded3ac024b4.tar.gz
prosody-435e008568a0590f89e3b6477b9d6ded3ac024b4.zip
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.
-rwxr-xr-xprosodyctl8
-rw-r--r--util/startup.lua2
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