Software /
code /
prosody
Changeset
11858:2bcd84123eba
net.server_epoll: Process all queued events from epoll before timers
Should call timers less frequently when many sockets are waiting for
processing. May help under heavy load.
Requested by Ge0rG
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Thu, 21 Oct 2021 15:59:16 +0200 |
parents | 11857:e080d6aa0b3b |
children | 11859:14cf34d35c30 |
files | net/server_epoll.lua |
diffstat | 1 files changed, 4 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/net/server_epoll.lua Wed Oct 20 23:06:07 2021 +0200 +++ b/net/server_epoll.lua Thu Oct 21 15:59:16 2021 +0200 @@ -1033,7 +1033,7 @@ repeat local t = runtimers(cfg.max_wait, cfg.min_wait); local fd, r, w = poll:wait(t); - if fd then + while fd do local conn = fds[fd]; if conn then if r then @@ -1046,7 +1046,9 @@ log("debug", "Removing unknown fd %d", fd); poll:del(fd); end - elseif r ~= "timeout" and r ~= "signal" then + fd, r, w = poll:wait(0); + end + if r ~= "timeout" and r ~= "signal" then log("debug", "epoll_wait error: %s[%d]", r, w); end until once or (quitting and next(fds) == nil);