util.startup: Fix async waiting for last shutdown steps 0.12
authorKim Alvefur <zash@zash.se>
Tue, 14 Jun 2022 16:28:49 +0200
branch0.12
changeset 12557 cc0ec0277813
parent 12553 3729a6bdb562
child 12558 dbbbcf6b805e
child 12561 ee5b061588ea
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
util/startup.lua
--- a/prosody	Sun Jun 12 01:50:33 2022 +0200
+++ b/prosody	Tue Jun 14 16:28:49 2022 +0200
@@ -82,4 +82,4 @@
 
 loop();
 
-thread:run(startup.shutdown);
+startup.exit();
--- a/util/startup.lua	Sun Jun 12 01:50:33 2022 +0200
+++ b/util/startup.lua	Tue Jun 14 16:28:49 2022 +0200
@@ -353,7 +353,7 @@
 			reason = reason;
 			code = code;
 		});
-		server.setquitting(true);
+		prosody.main_thread:run(startup.shutdown);
 	end
 end
 
@@ -644,6 +644,10 @@
 
 	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