summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorEmile Joubert <emile@rabbitmq.com>2012-05-23 13:37:10 +0100
committerEmile Joubert <emile@rabbitmq.com>2012-05-23 13:37:10 +0100
commite8f50568f840e9f9c2ec4971f1115e883b54dc44 (patch)
tree6a82a8fef79fe4b1fb6a3ce985204d6827f60aec /src
parentf213e8a03792c4df233c4d3522812178caed2d2c (diff)
downloadrabbitmq-server-git-e8f50568f840e9f9c2ec4971f1115e883b54dc44.tar.gz
Erase aliases more correctly
Diffstat (limited to 'src')
-rw-r--r--src/gm.erl15
1 files changed, 7 insertions, 8 deletions
diff --git a/src/gm.erl b/src/gm.erl
index 01300f18af..8cdb0a3ed8 100644
--- a/src/gm.erl
+++ b/src/gm.erl
@@ -665,22 +665,21 @@ handle_info({'DOWN', MRef, process, _Pid, _Reason},
_ ->
View1 =
group_to_view(record_dead_member_in_group(Member, GroupName)),
- State1 = State #state { view = View1 },
{Result, State2} =
case alive_view_members(View1) of
[Self] ->
- maybe_erase_aliases(
- State1 #state {
+ {Result1, State1} = maybe_erase_aliases( State ),
+ {Result1, State1 #state {
members_state = blank_member_state(),
- confirms = purge_confirms(Confirms) });
+ confirms = purge_confirms(Confirms) }};
_ ->
%% here we won't be pointing out any deaths:
%% the concern is that there maybe births
%% which we'd otherwise miss.
{callback_view_changed(Args, Module, View, View1),
- State1}
+ check_neighbours(State #state { view = View1 })}
end,
- handle_callback_result({Result, check_neighbours(State2)})
+ handle_callback_result({Result, State2})
end.
@@ -795,8 +794,8 @@ handle_msg({activity, Left, Activity},
State1 = State #state { members_state = MembersState1,
confirms = Confirms1 },
Activity3 = activity_finalise(Activity1),
+ ok = maybe_send_activity(Activity3, State1),
{Result, State2} = maybe_erase_aliases(State1),
- ok = maybe_send_activity(Activity3, State2),
if_callback_success(
Result, fun activity_true/3, fun activity_false/3, Activity3, State2);
@@ -1111,7 +1110,7 @@ maybe_erase_aliases(State = #state { self = Self,
_ -> View1 = group_to_view(
erase_members_in_group(Erasable, GroupName)),
{callback_view_changed(Args, Module, View, View1),
- State1 #state { view = View1 }}
+ check_neighbours(State1 #state { view = View1 })}
end.
can_erase_view_member(Self, Self, _LA, _LP) -> false;