# HG changeset patch # User Kim Alvefur # Date 1588974951 -7200 # Node ID 8a0a923e1cedeff21500a7d5d4cbf51b71f00e3b # Parent 86ea811ee25b663210ceeac543fad8eae3eb9d5e mod_s2s: Run stream close in async context Allows async processing during stream shutdown. Fixes potential ASYNC-01 issues, however no such issues known at the time of this commit. diff -r 86ea811ee25b -r 8a0a923e1ced plugins/mod_s2s/mod_s2s.lua --- a/plugins/mod_s2s/mod_s2s.lua Fri May 08 23:54:17 2020 +0200 +++ b/plugins/mod_s2s/mod_s2s.lua Fri May 08 23:55:51 2020 +0200 @@ -455,11 +455,16 @@ end end -function stream_callbacks.streamclosed(session) +function stream_callbacks._streamclosed(session) (session.log or log)("debug", "Received "); session:close(false); end +function stream_callbacks.streamclosed(session, attr) + -- run _streamclosed in async context + session.thread:run({ stream = "closed", attr = attr }); +end + function stream_callbacks.error(session, error, data) if error == "no-stream" then session.log("debug", "Invalid opening stream header (%s)", (data:gsub("^([^\1]+)\1", "{%1}"))); @@ -568,6 +573,8 @@ core_process_stanza(session, stanza); elseif stanza.stream == "opened" then stream_callbacks._streamopened(session, stanza.attr); + elseif stanza.stream == "closed" then + stream_callbacks._streamclosed(session, stanza.attr); end end, runner_callbacks, session);