Software /
code /
prosody
Changeset
12586:4c8941b5b05e 0.12
core.s2smanager: Don't remove unrelated session on close of bidi session
Normally with bidi, any outgoing connection should be the same as the
incoming, hence when closing a bidi connection it should be removed as a
route to the remote server. However it is not guaranteed, a remote bidi-capable server
might have decided to open a new connection for some reason. This can
lead to a situation where there are two bidi connections, and the s2sout
route is a locally initiated s2sout connection. In this case, such a
s2sout connection should be kept.
Noticed in a rare case where bidi has just been enabled on a running
server, and something establishes new connections immediately when a
connection is closed.
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Mon, 27 Jun 2022 01:22:36 +0200 |
parents | 12584:fb0bf0a0864f |
children | 12588:b15d3cf98ba6 12592:d580e6a57cbb |
files | core/s2smanager.lua |
diffstat | 1 files changed, 1 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/core/s2smanager.lua Mon May 30 17:34:58 2022 +0200 +++ b/core/s2smanager.lua Mon Jun 27 01:22:36 2022 +0200 @@ -94,7 +94,7 @@ hosts[session.from_host].s2sout[session.to_host] = nil; session:bounce_sendq(bounce_reason or reason); elseif session.direction == "incoming" then - if session.outgoing then + if session.outgoing and hosts[session.to_host].s2sout[session.from_host] == session then hosts[session.to_host].s2sout[session.from_host] = nil; end incoming_s2s[session] = nil;