changeset 14136:e27d94d8f505 13.0

net.server_epoll: Clean up timers after disconnection
author Waqas Hussain <waqas20@gmail.com>
date Thu, 16 Apr 2026 19:00:22 +0100
parents 836a70deb3c9
children 368df9b2d511
files net/server_epoll.lua
diffstat 1 files changed, 9 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/net/server_epoll.lua	Thu Apr 16 18:59:56 2026 +0100
+++ b/net/server_epoll.lua	Thu Apr 16 19:00:22 2026 +0100
@@ -154,9 +154,8 @@
 local closedtimers = {};
 
 local function closetimer(id)
-	if timers:remove(id) then
-		closedtimers[id] = true;
-	end
+	closedtimers[id] = true;
+	timers:remove(id);
 end
 
 local function reschedule(id, time)
@@ -697,6 +696,10 @@
 	-- make sure tls sockets aren't put in blocking mode
 	if self.conn.shutdown and self._tls then self.conn:shutdown(); end
 	self:del();
+	if self._pausefor then
+		closetimer(self._pausefor);
+		self._pausefor = nil;
+	end
 	self:setwritetimeout(false);
 	self:setreadtimeout(false);
 	self.onreadable = noop;
@@ -961,6 +964,9 @@
 	self:set(false);
 	self._pausefor = addtimer(t, function ()
 		self._pausefor = nil;
+		if not self.conn then
+			return;
+		end
 		self:set(true);
 		self:noise("Resuming after pause");
 		if self.conn and self.conn:dirty() then