diff options
author | Evgeniy Khramtsov <ekhramtsov@process-one.net> | 2017-04-14 20:41:25 +0300 |
---|---|---|
committer | Evgeniy Khramtsov <ekhramtsov@process-one.net> | 2017-04-14 20:41:25 +0300 |
commit | 0a7eb337720d03d4e34b2d70cbed2c6837ef1382 (patch) | |
tree | 112bddad5e322baeb0d1832db10fb43ae4926ef2 /src/ejabberd_sm.erl | |
parent | Fix a typo (diff) |
Better process session close
Diffstat (limited to 'src/ejabberd_sm.erl')
-rw-r--r-- | src/ejabberd_sm.erl | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/src/ejabberd_sm.erl b/src/ejabberd_sm.erl index 1cd911e1..20614a58 100644 --- a/src/ejabberd_sm.erl +++ b/src/ejabberd_sm.erl @@ -162,11 +162,12 @@ close_session(SID, User, Server, Resource) -> LServer = jid:nameprep(Server), LResource = jid:resourceprep(Resource), Mod = get_sm_backend(LServer), - Info = case get_sessions(Mod, LUser, LServer, LResource) of - [#session{info = I} = Session|_] -> + Sessions = get_sessions(Mod, LUser, LServer, LResource), + Info = case lists:keyfind(SID, #session.sid, Sessions) of + #session{info = I} = Session -> delete_session(Mod, Session), I; - [] -> + _ -> [] end, JID = jid:make(User, Server, Resource), @@ -472,7 +473,8 @@ host_down(Host) -> Mod = get_sm_backend(Host), lists:foreach( fun(#session{sid = {_, Pid}}) when node(Pid) == node() -> - ejabberd_c2s:send(Pid, xmpp:serr_system_shutdown()); + ejabberd_c2s:send(Pid, xmpp:serr_system_shutdown()), + ejabberd_c2s:stop(Pid); (_) -> ok end, get_sessions(Mod, Host)), |