25
1
mirror of https://github.com/processone/ejabberd.git synced 2024-12-20 17:27:00 +01:00

Fix race condition when deleting c2s session record

This commit is contained in:
Evgeny Khramtsov 2019-07-30 15:21:58 +03:00
parent 209f5d32e1
commit b4770815c0

View File

@ -276,6 +276,8 @@ c2s_closed(State, _Reason) ->
c2s_terminated(#{mgmt_state := resumed, sid := SID, jid := JID} = State, _Reason) -> c2s_terminated(#{mgmt_state := resumed, sid := SID, jid := JID} = State, _Reason) ->
?DEBUG("Closing former stream of resumed session for ~s", ?DEBUG("Closing former stream of resumed session for ~s",
[jid:encode(JID)]), [jid:encode(JID)]),
{U, S, R} = jid:tolower(JID),
ejabberd_sm:close_session(SID, U, S, R),
ejabberd_c2s:bounce_message_queue(SID, JID), ejabberd_c2s:bounce_message_queue(SID, JID),
{stop, State}; {stop, State};
c2s_terminated(#{mgmt_state := MgmtState, mgmt_stanzas_in := In, 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_in => NumStanzasIn,
mgmt_stanzas_out => NumStanzasOut, mgmt_stanzas_out => NumStanzasOut,
mgmt_state => active}, mgmt_state => active},
ejabberd_sm:close_session(OldSID, U, S, R),
State3 = ejabberd_c2s:open_session(State2), State3 = ejabberd_c2s:open_session(State2),
ejabberd_c2s:stop(OldPID), ejabberd_c2s:stop(OldPID),
{ok, State3}; {ok, State3};