Diff

net/server_epoll.lua @ 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
parent 11839:19b50ce9ef5a
child 11920:ff4e34c448a4
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);