aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--net/server_epoll.lua18
-rwxr-xr-xprosodyctl2
2 files changed, 19 insertions, 1 deletions
diff --git a/net/server_epoll.lua b/net/server_epoll.lua
index 610a0fbf..90d3929f 100644
--- a/net/server_epoll.lua
+++ b/net/server_epoll.lua
@@ -89,6 +89,9 @@ local default_config = { __index = {
-- Reuse write buffer tables
keep_buffers = true;
+
+ --- How long to wait after getting the shutdown signal before forcefully tearing down every socket
+ shutdown_deadline = 5;
}};
local cfg = default_config.__index;
@@ -1004,6 +1007,21 @@ local function setquitting(quit)
if quit then
quitting = "quitting";
closeall();
+ addtimer(1, function ()
+ if quitting then
+ closeall();
+ return 1;
+ end
+ end);
+ if cfg.shutdown_deadline then
+ addtimer(cfg.shutdown_deadline, function ()
+ if quitting then
+ for fd, conn in pairs(fds) do -- luacheck: ignore 213/fd
+ conn:destroy();
+ end
+ end
+ end);
+ end
else
quitting = nil;
end
diff --git a/prosodyctl b/prosodyctl
index 629be65c..3fef8801 100755
--- a/prosodyctl
+++ b/prosodyctl
@@ -230,7 +230,7 @@ local function service_command_warning(service_command)
if prosody.installed and configmanager.get("*", "prosodyctl_service_warnings") ~= false then
show_warning("WARNING: Use of prosodyctl start/stop/restart/reload is not recommended");
show_warning(" if Prosody is managed by an init system - use that directly instead.");
- lfs = lfs or require
+ lfs = lfs or require"lfs";
if lfs.attributes("/etc/systemd") then
show_warning(" e.g. systemctl %s prosody", service_command);
elseif lfs.attributes("/etc/init.d/prosody") then