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