From d5e749bc8a1a6b003ba858310145745dcad5ec9c Mon Sep 17 00:00:00 2001 From: Kim Alvefur Date: Tue, 14 Jun 2022 16:28:49 +0200 Subject: util.startup: Fix async waiting for last shutdown steps Observed problem: When shutting down prosody would immediately exit after waiting for s2s connections to close, skipping the last cleanup events and reporting the exit reason and code. This happens because prosody.main_thread is in a waiting state and queuing startup.shutdown is dispatched trough the main loop via nexttick, but since the main loop was no longer running at that point it proceeded to the end of the prosody script and exited there. --- prosody | 2 +- util/startup.lua | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/prosody b/prosody index 914396c2..ac623cef 100755 --- a/prosody +++ b/prosody @@ -82,4 +82,4 @@ end loop(); -thread:run(startup.shutdown); +startup.exit(); diff --git a/util/startup.lua b/util/startup.lua index ab8b61da..e2e7db09 100644 --- a/util/startup.lua +++ b/util/startup.lua @@ -353,7 +353,7 @@ function startup.add_global_prosody_functions() reason = reason; code = code; }); - server.setquitting(true); + prosody.main_thread:run(startup.shutdown); end end @@ -644,6 +644,10 @@ function startup.shutdown() prosody.log("debug", "Shutdown reason was: %s", prosody.shutdown_reason or "not specified"); prosody.log("debug", "Exiting with status code: %d", prosody.shutdown_code or 0); + server.setquitting(true); +end + +function startup.exit() os.exit(prosody.shutdown_code); end -- cgit v1.2.3