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);