# HG changeset patch # User Kim Alvefur # Date 1672976319 -3600 # Node ID f33887f925e12538897a09e7007695cd904d5144 # Parent 0605d4f03e25f69d0aeb5383325f822bc539c0ee 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. diff -r 0605d4f03e25 -r f33887f925e1 net/server_epoll.lua --- a/net/server_epoll.lua Fri Jan 06 02:31:21 2023 +0100 +++ b/net/server_epoll.lua Fri Jan 06 04:38:39 2023 +0100 @@ -1109,10 +1109,11 @@ 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 @@ 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