aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorEvgeniy Khramtsov <ekhramtsov@process-one.net>2012-01-04 16:43:10 +1000
committerEvgeniy Khramtsov <ekhramtsov@process-one.net>2012-01-04 16:43:10 +1000
commit2948cddebf59378909852b179677040a2a64e909 (patch)
tree41ff06ff35ed0bd125a82eacb7cbf4a1ee172009 /src
parentMerge branch '2.2.x' of git+ssh://gitorious.process-one.net/+ejabberd-develop... (diff)
Check a node of a receiver, not a monitor.
This should fix the previous commit (EJABS-1798)
Diffstat (limited to 'src')
-rw-r--r--src/ejabberd_c2s.erl14
1 files 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.