From 2948cddebf59378909852b179677040a2a64e909 Mon Sep 17 00:00:00 2001 From: Evgeniy Khramtsov Date: Wed, 4 Jan 2012 16:43:10 +1000 Subject: [PATCH] Check a node of a receiver, not a monitor. This should fix the previous commit (EJABS-1798) --- src/ejabberd_c2s.erl | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/ejabberd_c2s.erl b/src/ejabberd_c2s.erl index 81d97bebc..92ca4f11e 100644 --- a/src/ejabberd_c2s.erl +++ b/src/ejabberd_c2s.erl @@ -1747,11 +1747,12 @@ handle_info({migrate, Node}, StateName, StateData) -> fsm_next_state(StateName, StateData) end; handle_info({migrate_shutdown, Node, After}, StateName, StateData) -> - if StateData#state.sockmod == ejabberd_frontend_socket orelse - StateData#state.xml_socket == true orelse - node(StateData#state.socket_monitor) /= node() -> + case StateData#state.sockmod == ejabberd_frontend_socket orelse + StateData#state.xml_socket == true orelse + is_remote_receiver(StateData#state.socket) of + true -> migrate(self(), Node, After); - true -> + false -> self() ! system_shutdown end, fsm_next_state(StateName, StateData); @@ -3609,3 +3610,8 @@ get_jid_from_opts(Opts) -> _ -> error end. + +is_remote_receiver(#socket_state{receiver = Pid}) when is_pid(Pid) -> + node(Pid) /= node(); +is_remote_receiver(_) -> + false.