diff options
author | Kim Alvefur <zash@zash.se> | 2021-10-21 15:59:16 +0200 |
---|---|---|
committer | Kim Alvefur <zash@zash.se> | 2021-10-21 15:59:16 +0200 |
commit | 2408c299f020c5132edfc78a3566de83aa729f91 (patch) | |
tree | 9c06b3e2080f3263d9f7ebe828653dd3951f05ea | |
parent | aed2ada774adb4dda55266ec1b0620aa861d93e7 (diff) | |
download | prosody-2408c299f020c5132edfc78a3566de83aa729f91.tar.gz prosody-2408c299f020c5132edfc78a3566de83aa729f91.zip |
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
-rw-r--r-- | net/server_epoll.lua | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/net/server_epoll.lua b/net/server_epoll.lua index e4fea5c1..0a0f89c5 100644 --- a/net/server_epoll.lua +++ b/net/server_epoll.lua @@ -1033,7 +1033,7 @@ local function loop(once) 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 @@ local function loop(once) 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); |