diff options
| author | Matthew Sackman <matthew@rabbitmq.com> | 2012-05-25 15:17:57 +0100 |
|---|---|---|
| committer | Matthew Sackman <matthew@rabbitmq.com> | 2012-05-25 15:17:57 +0100 |
| commit | 4c2b8814a5255db6fe645f7412024a43b9987a8d (patch) | |
| tree | 244f99c233d4bf427de8d06077b1330dbce02502 | |
| parent | e5198431dbc0565c85ce1e1621d39b13f203edc2 (diff) | |
| parent | 3bf2cb5eb2bd7de1e53d778f3dea0c99537fe833 (diff) | |
| download | rabbitmq-server-git-4c2b8814a5255db6fe645f7412024a43b9987a8d.tar.gz | |
Merging bug 24952 into default
| -rw-r--r-- | src/gm.erl | 25 |
1 files changed, 12 insertions, 13 deletions
diff --git a/src/gm.erl b/src/gm.erl index 7febeafb4b..eb93e4c45c 100644 --- a/src/gm.erl +++ b/src/gm.erl @@ -671,22 +671,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, View1), + {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. @@ -805,8 +804,8 @@ handle_msg({activity, Left, Activity}, State1 = State #state { members_state = MembersState1, confirms = Confirms1 }, Activity3 = activity_finalise(Activity1), - {Result, State2} = maybe_erase_aliases(State1), - ok = maybe_send_activity(Activity3, State2), + ok = maybe_send_activity(Activity3, State1), + {Result, State2} = maybe_erase_aliases(State1, View), if_callback_success( Result, fun activity_true/3, fun activity_false/3, Activity3, State2); @@ -1103,10 +1102,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( @@ -1121,11 +1120,11 @@ 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), - State1 #state { view = View1 }} + {callback_view_changed(Args, Module, View0, View1), + check_neighbours(State1 #state { view = View1 })} end. can_erase_view_member(Self, Self, _LA, _LP) -> false; |
