mod_smacks: Bounce unacked stanzas on shutdown
authorKim Alvefur <zash@zash.se>
Fri, 17 Dec 2021 16:21:26 +0100
changeset 12069 9102cbd2aec4
parent 12068 d2380fd5e421
child 12070 f07c8240a71d
mod_smacks: Bounce unacked stanzas on shutdown
plugins/mod_smacks.lua
--- a/plugins/mod_smacks.lua	Fri Dec 17 16:00:08 2021 +0100
+++ b/plugins/mod_smacks.lua	Fri Dec 17 16:21:26 2021 +0100
@@ -634,7 +634,8 @@
 module:hook("s2s-read-timeout", handle_read_timeout);
 module:hook("c2s-read-timeout", handle_read_timeout);
 
-module:hook_global("server-stopping", function()
+module:hook_global("server-stopping", function(event)
+	local reason = event.reason;
 	-- Close smacks-enaled sessions ourselves instead of letting mod_c2s close
 	-- it, which invalidates the smacks session. This allows preserving the
 	-- counter value, so it can be communicated to the client when it tries to
@@ -644,12 +645,21 @@
 			if session.resumption_token then
 				if old_session_registry:set(session.username, session.resumption_token, { h = session.handled_stanza_count }) then
 					session.resumption_token = nil;
+
+					-- Deal with unacked stanzas
+					if session.outgoing_stanza_queue then
+						handle_unacked_stanzas(session);
+					end
+
 					if session.conn then
 						session.conn:close()
 						session.conn = nil;
 						-- Now when mod_c2s gets here, it will immediately destroy the
 						-- session since it is unconnected.
 					end
+
+					-- And make sure nobody tries to send anything
+					session:close{ condition = "system-shutdown", text = reason };
 				end
 			end
 		end