From 6d5ff6d2be030b9ab133867eca04200923a42fdb Mon Sep 17 00:00:00 2001 From: Kim Alvefur Date: Mon, 20 Sep 2021 14:42:18 +0200 Subject: net.server_epoll: Close sockets added after shutdown signal (fixes #1670) This should ensure that sockets get closed even if they are added after the quit signal. Otherwise they may keep the server alive. --- net/server_epoll.lua | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'net') diff --git a/net/server_epoll.lua b/net/server_epoll.lua index 1abdc4a4..ae9808ad 100644 --- a/net/server_epoll.lua +++ b/net/server_epoll.lua @@ -743,6 +743,12 @@ local function setquitting(quit) if quit then quitting = "quitting"; closeall(); + addtimer(1, function () + if quitting then + closeall(); + return 1; + end + end); else quitting = nil; end -- cgit v1.2.3 From 24111569bb5b75ea37cbf2c29d49d88206365ae2 Mon Sep 17 00:00:00 2001 From: Kim Alvefur Date: Mon, 20 Sep 2021 14:38:08 +0200 Subject: net.server_epoll: Add a hard deadline on shutdown to extra-fix #1670 Should ensure shutdown even if sockets somehow take a very long to get closed. --- net/server_epoll.lua | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'net') diff --git a/net/server_epoll.lua b/net/server_epoll.lua index ae9808ad..c47e1a70 100644 --- a/net/server_epoll.lua +++ b/net/server_epoll.lua @@ -58,6 +58,9 @@ local default_config = { __index = { -- Maximum and minimum amount of time to sleep waiting for events (adjusted for pending timers) max_wait = 86400; min_wait = 1e-06; + + --- How long to wait after getting the shutdown signal before forcefully tearing down every socket + shutdown_deadline = 5; }}; local cfg = default_config.__index; @@ -749,6 +752,15 @@ local function setquitting(quit) 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 -- cgit v1.2.3