Mercurial > prosody-modules
view mod_graceful_shutdown/mod_graceful_shutdown.lua @ 5734:cef8bce2d71b
luacheck: Add new module API methods from trunk
See
* trunk rev 4d4f9e42bcf8
* trunk rev 65fb0d7a2312
* trunk rev c9ef35fab0b1
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Mon, 27 Nov 2023 07:10:06 +0100 |
parents | d4ce29c772ac |
children |
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"); portman.deactivate("legacy_ssl"); portman.deactivate("c2s_direct_tls"); -- Close multiplexing ports to ensure c2s is not reachable via those either portman.deactivate("multiplex"); portman.deactivate("multiplex_ssl"); portman.deactivate("proxy"); -- mod_net_proxy -- 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);