core.sessionmanager: Delay closing a replaced connection after replacement
authorKim Alvefur <zash@zash.se>
Sun, 07 May 2023 12:27:55 +0200
changeset 13099 1693bd4de283
parent 13098 4002f0aa6a04
child 13100 9638ff8b1c81
core.sessionmanager: Delay closing a replaced connection after replacement Closing the session invokes ondisconnect and session close logic, including mod_smacks hibernation and the timer that destroys the session after a timeout. By closing the connection after it has been detached from the sessions table it will no longer invoke the ondetach handler, which should prevent the above problem.
core/sessionmanager.lua
plugins/mod_c2s.lua
--- a/core/sessionmanager.lua	Thu May 04 17:30:40 2023 +0200
+++ b/core/sessionmanager.lua	Sun May 07 12:27:55 2023 +0200
@@ -100,8 +100,7 @@
 
 	local replaced_conn = to_session.conn;
 	if replaced_conn then
-		to_session.log("debug", "closing a replaced connection for this session");
-		replaced_conn:close();
+		to_session.conn = nil;
 	end
 
 	to_session.since = from_session.since;
--- a/plugins/mod_c2s.lua	Thu May 04 17:30:40 2023 +0200
+++ b/plugins/mod_c2s.lua	Sun May 07 12:27:55 2023 +0200
@@ -273,6 +273,7 @@
 	local replaced_conn = event.replaced_conn;
 	if replaced_conn then
 		sessions[replaced_conn] = nil;
+		replaced_conn:close();
 	end
 end);