Software /
code /
prosody-modules
File
mod_graceful_shutdown/mod_graceful_shutdown.lua @ 3171:f35b2b76df6d
mod_smacks_noerror: Add ability to silence errors if mod_offline is disabled
This will also silence "message not delivered" errors if mod_offline
is disabled and all clients are offline.
This assumes working MAM for all clients (lready assumed by the rest of this module).
author | tmolitor <thilo@eightysoft.de> |
---|---|
date | Tue, 03 Jul 2018 01:03:48 +0200 |
parent | 2170:4652a112a4ba |
child | 4892: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);