Software /
code /
prosody-modules
File
mod_graceful_shutdown/mod_graceful_shutdown.lua @ 5382:12498c0d705f
mod_http_oauth2: Reorder routes into order they happen in OAuth 2.0
Since I usually start here to remember the order of things, might as
well turn it into a mini step by step guide :)
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Sat, 29 Apr 2023 11:26:04 +0200 |
parent | 4893:d4ce29c772ac |
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);