Changeset

11419:2c26dfc1977f

mod_s2s: Buffer stream error + stream closing tag In "opportunistic writes" mode, prevents ondisconnect from happening while writing the stream closing tag.
author Kim Alvefur <zash@zash.se>
date Wed, 03 Mar 2021 13:34:00 +0100
parents 11418:f4b76e500768
children 11420:f768db80aee0
files plugins/mod_s2s.lua
diffstat 1 files changed, 4 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/plugins/mod_s2s.lua	Wed Mar 03 13:30:19 2021 +0100
+++ b/plugins/mod_s2s.lua	Wed Mar 03 13:34:00 2021 +0100
@@ -503,6 +503,8 @@
 local function session_close(session, reason, remote_reason, bounce_reason)
 	local log = session.log or log;
 	if session.conn then
+		local conn = session.conn;
+		conn:pause_writes(); -- until :close
 		if session.notopen then
 			if session.direction == "incoming" then
 				session:open_stream(session.to_host, session.from_host);
@@ -540,8 +542,9 @@
 		session.log("info", "%s s2s stream %s->%s closed: %s", session.direction:gsub("^.", string.upper),
 			session.from_host or "(unknown host)", session.to_host or "(unknown host)", reason or "stream closed");
 
+		conn:resume_writes();
+
 		-- Authenticated incoming stream may still be sending us stanzas, so wait for </stream:stream> from remote
-		local conn = session.conn;
 		if reason == nil and not session.notopen and session.direction == "incoming" then
 			add_task(stream_close_timeout, function ()
 				if not session.destroyed then