# HG changeset patch # User Kim Alvefur # Date 1614774840 -3600 # Node ID 2c26dfc1977f542ea4efd253987df2cbaa50805c # Parent f4b76e500768a73110c72c1e634937f3aa7dec72 mod_s2s: Buffer stream error + stream closing tag In "opportunistic writes" mode, prevents ondisconnect from happening while writing the stream closing tag. diff -r f4b76e500768 -r 2c26dfc1977f plugins/mod_s2s.lua --- 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 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