From f5006b12024db1c76601cfe69960788a254c2b26 Mon Sep 17 00:00:00 2001 From: Kim Alvefur Date: Fri, 6 Jan 2023 04:38:39 +0100 Subject: net.server_epoll: Remove delay on last main loop iteration when quitting Main difference is that timers are not checked unconditionally before each poll, only when running out of previous poll results (hidden by util.poll). This removes a final poll at shutdown that usually delays the 'not quitting' condition check by one second. --- net/server_epoll.lua | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) (limited to 'net') diff --git a/net/server_epoll.lua b/net/server_epoll.lua index 66a60b5e..c7ab0c13 100644 --- a/net/server_epoll.lua +++ b/net/server_epoll.lua @@ -1109,10 +1109,11 @@ local function loop(once) return loop_once(); end - repeat - local t = runtimers(cfg.max_wait, cfg.min_wait); + local t = 0; + while not quitting do local fd, r, w = poll:wait(t); - while fd do + if fd then + t = 0; local conn = fds[fd]; if conn then if r then @@ -1125,12 +1126,12 @@ local function loop(once) log("debug", "Removing unknown fd %d", fd); poll:del(fd); end - fd, r, w = poll:wait(0); - end - if r ~= "timeout" and r ~= "signal" then + elseif r == "timeout" then + t = runtimers(cfg.max_wait, cfg.min_wait); + elseif r ~= "signal" then log("debug", "epoll_wait error: %s[%d]", r, w); end - until (quitting and next(fds) == nil); + end return quitting; end -- cgit v1.2.3