summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEmile Joubert <emile@rabbitmq.com>2012-05-25 14:19:53 +0100
committerEmile Joubert <emile@rabbitmq.com>2012-05-25 14:19:53 +0100
commitb95a2e833fc78dccc688038ebe3a045daa17874a (patch)
tree06ba37ebdf55346b67be78e608b97dd3fd6c71af
parentf1d74ce57cab7ed65ec3e366308c09f9f24f471a (diff)
downloadrabbitmq-server-b95a2e833fc78dccc688038ebe3a045daa17874a.tar.gz
Refrain from discarding updated view when no aliases are removed
-rw-r--r--src/gm.erl12
1 files changed, 6 insertions, 6 deletions
diff --git a/src/gm.erl b/src/gm.erl
index 8cdb0a3e..5b952da9 100644
--- a/src/gm.erl
+++ b/src/gm.erl
@@ -668,7 +668,7 @@ handle_info({'DOWN', MRef, process, _Pid, _Reason},
{Result, State2} =
case alive_view_members(View1) of
[Self] ->
- {Result1, State1} = maybe_erase_aliases( State ),
+ {Result1, State1} = maybe_erase_aliases( State, View1 ),
{Result1, State1 #state {
members_state = blank_member_state(),
confirms = purge_confirms(Confirms) }};
@@ -795,7 +795,7 @@ handle_msg({activity, Left, Activity},
confirms = Confirms1 },
Activity3 = activity_finalise(Activity1),
ok = maybe_send_activity(Activity3, State1),
- {Result, State2} = maybe_erase_aliases(State1),
+ {Result, State2} = maybe_erase_aliases(State1, View),
if_callback_success(
Result, fun activity_true/3, fun activity_false/3, Activity3, State2);
@@ -1088,10 +1088,10 @@ erase_members_in_group(Members, GroupName) ->
maybe_erase_aliases(State = #state { self = Self,
group_name = GroupName,
- view = View,
+ view = View0,
members_state = MembersState,
module = Module,
- callback_args = Args }) ->
+ callback_args = Args }, View) ->
#view_member { aliases = Aliases } = fetch_view_member(Self, View),
{Erasable, MembersState1}
= ?SETS:fold(
@@ -1106,10 +1106,10 @@ maybe_erase_aliases(State = #state { self = Self,
end, {[], MembersState}, Aliases),
State1 = State #state { members_state = MembersState1 },
case Erasable of
- [] -> {ok, State1};
+ [] -> {ok, State1 #state { view = View }};
_ -> View1 = group_to_view(
erase_members_in_group(Erasable, GroupName)),
- {callback_view_changed(Args, Module, View, View1),
+ {callback_view_changed(Args, Module, View0, View1),
check_neighbours(State1 #state { view = View1 })}
end.