Changeset

13576:5d8fc1c4eb7c

mod_smacks: Run session destruction code in session's async context This is the Right Thing and should fix various potential issues and race conditions.
author Matthew Wild <mwild1@gmail.com>
date Thu, 21 Nov 2024 17:02:55 +0000
parents 13575:750ff9f579e2
children 13577:a45b209302c1
files plugins/mod_smacks.lua
diffstat 1 files changed, 11 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- a/plugins/mod_smacks.lua	Thu Nov 21 17:02:07 2024 +0000
+++ b/plugins/mod_smacks.lua	Thu Nov 21 17:02:55 2024 +0000
@@ -541,13 +541,17 @@
 			return
 		end
 
-		prosody.main_thread:run(function ()
-			session.log("debug", "Destroying session for hibernating too long");
-			save_old_session(session);
-			session.resumption_token = nil;
-			sessionmanager.destroy_session(session, "Hibernating too long");
-			sessions_expired(1);
-		end);
+		session.thread:run({
+			event = "callback";
+			name = "mod_smacks/destroy_hibernating";
+			callback = function ()
+				session.log("debug", "Destroying session for hibernating too long");
+				save_old_session(session);
+				session.resumption_token = nil;
+				sessionmanager.destroy_session(session, "Hibernating too long");
+				sessions_expired(1);
+			end;
+		});
 	end);
 	if session.conn then
 		local conn = session.conn;