From: Evgeny Khramtsov Date: Tue, 30 Jul 2019 12:21:58 +0000 (+0300) Subject: Fix race condition when deleting c2s session record X-Git-Tag: 19.08~22 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=b4770815c0b0416c21d01507d2908f94c25b3097;p=ejabberd Fix race condition when deleting c2s session record --- 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};