aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKim Alvefur <zash@zash.se>2020-05-08 23:55:51 +0200
committerKim Alvefur <zash@zash.se>2020-05-08 23:55:51 +0200
commit1150c8ab78f1b261ca39a08550389ac101fc3247 (patch)
treeaa68986ed5683800e12e6e125fae4a639084b565
parent0f201fd4b4229836ec7824112ba3962e907707a0 (diff)
downloadprosody-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.
-rw-r--r--plugins/mod_s2s/mod_s2s.lua9
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);