mirror of
https://github.com/bjc/prosody.git
synced 2025-04-03 21:27:38 +03:00
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.
This commit is contained in:
parent
5acb354989
commit
f5006b1202
1 changed files with 8 additions and 7 deletions
|
@ -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
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue