aboutsummaryrefslogtreecommitdiff
path: root/src/mod_stream_mgmt.erl
diff options
context:
space:
mode:
authorEvgeny Khramtsov <ekhramtsov@process-one.net>2019-07-30 15:21:58 +0300
committerEvgeny Khramtsov <ekhramtsov@process-one.net>2019-07-30 15:21:58 +0300
commitb4770815c0b0416c21d01507d2908f94c25b3097 (patch)
tree9029a28fd2f3381504d3d6244906ae6e45bd80e6 /src/mod_stream_mgmt.erl
parentFix SQL connections leakage (diff)
Fix race condition when deleting c2s session record
Diffstat (limited to 'src/mod_stream_mgmt.erl')
-rw-r--r--src/mod_stream_mgmt.erl3
1 files changed, 2 insertions, 1 deletions
diff --git a/src/mod_stream_mgmt.erl b/src/mod_stream_mgmt.erl
index 45c30e161..9786304a5 100644
--- a/src/mod_stream_mgmt.erl
+++ b/src/mod_stream_mgmt.erl
@@ -276,6 +276,8 @@ c2s_closed(State, _Reason) ->
c2s_terminated(#{mgmt_state := resumed, sid := SID, jid := JID} = State, _Reason) ->
?DEBUG("Closing former stream of resumed session for ~s",
[jid:encode(JID)]),
+ {U, S, R} = jid:tolower(JID),
+ ejabberd_sm:close_session(SID, U, S, R),
ejabberd_c2s:bounce_message_queue(SID, JID),
{stop, State};
c2s_terminated(#{mgmt_state := MgmtState, mgmt_stanzas_in := In,
@@ -653,7 +655,6 @@ inherit_session_state(#{user := U, server := S,
mgmt_stanzas_in => NumStanzasIn,
mgmt_stanzas_out => NumStanzasOut,
mgmt_state => active},
- ejabberd_sm:close_session(OldSID, U, S, R),
State3 = ejabberd_c2s:open_session(State2),
ejabberd_c2s:stop(OldPID),
{ok, State3};