summaryrefslogtreecommitdiff
path: root/src/ejabberd_sm.erl
diff options
context:
space:
mode:
authorEvgeniy Khramtsov <ekhramtsov@process-one.net>2017-04-14 20:41:25 +0300
committerEvgeniy Khramtsov <ekhramtsov@process-one.net>2017-04-14 20:41:25 +0300
commit0a7eb337720d03d4e34b2d70cbed2c6837ef1382 (patch)
tree112bddad5e322baeb0d1832db10fb43ae4926ef2 /src/ejabberd_sm.erl
parentFix a typo (diff)
Better process session close
Diffstat (limited to 'src/ejabberd_sm.erl')
-rw-r--r--src/ejabberd_sm.erl10
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)),