view mod_graceful_shutdown/mod_graceful_shutdown.lua @ 4499:8e644bf36627

mod_rest: Change OOB namespace to the one used in messages Because of it's current popularity as companion to HTTP Upload this is probably more useful than the iq one.
author Kim Alvefur <zash@zash.se>
date Sun, 07 Mar 2021 01:26:20 +0100
parents 4652a112a4ba
children 8dbaa5e753f3
line wrap: on
line source

-- luacheck: ignore 122/prosody 113/prosody

local timer = require "util.timer";
local portman = require "core.portmanager";
local server = require "net.server";

module:set_global();
local orig_shutdown = prosody.shutdown;

local pause = module:get_option_number("shutdown_pause", 1);

function module.unload()
	prosody.shutdown = orig_shutdown;
end

prosody.shutdown = coroutine.wrap(function (reason, code)
	prosody.shutdown_reason = reason;
	prosody.shutdown_code = code;
	timer.add_task(pause, prosody.shutdown);
	coroutine.yield(true, "shutdown initiated");
	-- Close c2s ports, stop accepting new connections
	portman.deactivate("c2s");
	-- Close all c2s sessions
	for _, sess in pairs(prosody.full_sessions) do
		sess:close{ condition = "system-shutdown", text = reason }
	end
	-- Wait for notifications to be sent
	coroutine.yield(pause);
	-- Event for everything else to shut down
	prosody.events.fire_event("server-stopping", {
		reason = reason;
		code = code;
	});
	-- And wait
	coroutine.yield(pause);
	-- And stop main event loop
	server.setquitting(true);
	-- And wait for death
	coroutine.yield(pause * 3);
	-- you came back? die zombie!
	os.exit(1);
end);