changeset 14156:57d8b5c5a4e7 0.12

net.server_epoll: Clean up timers after disconnection
author Waqas Hussain <waqas20@gmail.com>
date Thu, 16 Apr 2026 19:00:22 +0100
parents ead9e645741a
children f881ed0ee8bd
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
@@ -106,9 +106,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)
@@ -595,6 +594,10 @@
 
 function interface:destroy()
 	self:del();
+	if self._pausefor then
+		closetimer(self._pausefor);
+		self._pausefor = nil;
+	end
 	self:setwritetimeout(false);
 	self:setreadtimeout(false);
 	self.onreadable = noop;
@@ -822,6 +825,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