diff options
author | Kim Alvefur <zash@zash.se> | 2020-05-08 23:55:51 +0200 |
---|---|---|
committer | Kim Alvefur <zash@zash.se> | 2020-05-08 23:55:51 +0200 |
commit | 1150c8ab78f1b261ca39a08550389ac101fc3247 (patch) | |
tree | aa68986ed5683800e12e6e125fae4a639084b565 /plugins | |
parent | 0f201fd4b4229836ec7824112ba3962e907707a0 (diff) | |
download | prosody-1150c8ab78f1b261ca39a08550389ac101fc3247.tar.gz prosody-1150c8ab78f1b261ca39a08550389ac101fc3247.zip |
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.
Diffstat (limited to 'plugins')
-rw-r--r-- | plugins/mod_s2s/mod_s2s.lua | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/plugins/mod_s2s/mod_s2s.lua b/plugins/mod_s2s/mod_s2s.lua index 2dad864c..9f7d4d6d 100644 --- a/plugins/mod_s2s/mod_s2s.lua +++ b/plugins/mod_s2s/mod_s2s.lua @@ -455,11 +455,16 @@ function stream_callbacks._streamopened(session, attr) end end -function stream_callbacks.streamclosed(session) +function stream_callbacks._streamclosed(session) (session.log or log)("debug", "Received </stream:stream>"); 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 @@ local function initialize_session(session) 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); |