diff options
| -rw-r--r-- | src/gm.erl | 34 |
1 files changed, 19 insertions, 15 deletions
diff --git a/src/gm.erl b/src/gm.erl index c6d73b6cdd..74e19ee6fd 100644 --- a/src/gm.erl +++ b/src/gm.erl @@ -611,7 +611,7 @@ handle_call({add_on_right, NewMember}, _From, handle_callback_result({Result, {ok, Group}, State1}) catch lost_membership -> - {stop, normal, State} + {stop, shutdown, State} end. %% add_on_right causes a catchup to be sent immediately from the left, @@ -646,7 +646,7 @@ handle_cast({?TAG, ReqVer, Msg}, Result, fun handle_msg_true/3, fun handle_msg_false/3, Msg, State1)) catch lost_membership -> - {stop, normal, State} + {stop, shutdown, State} end; handle_cast({broadcast, _Msg, _SizeHint}, @@ -675,16 +675,21 @@ handle_cast(join, State = #state { self = Self, module = Module, callback_args = Args, txn_executor = TxnFun }) -> - View = join_group(Self, GroupName, TxnFun), - MembersState = - case alive_view_members(View) of - [Self] -> blank_member_state(); - _ -> undefined - end, - State1 = check_neighbours(State #state { view = View, - members_state = MembersState }), - handle_callback_result( - {Module:joined(Args, get_pids(all_known_members(View))), State1}); + try + View = join_group(Self, GroupName, TxnFun), + MembersState = + case alive_view_members(View) of + [Self] -> blank_member_state(); + _ -> undefined + end, + State1 = check_neighbours(State #state { view = View, + members_state = MembersState }), + handle_callback_result( + {Module:joined(Args, get_pids(all_known_members(View))), State1}) + catch + lost_membership -> + {stop, shutdown, State} + end; handle_cast({validate_members, OldMembers}, State = #state { view = View, @@ -756,7 +761,7 @@ handle_info({'DOWN', MRef, process, _Pid, Reason}, end catch lost_membership -> - {stop, normal, State} + {stop, shutdown, State} end; handle_info(_, State) -> %% Discard any unexpected messages, such as late replies from neighbour_call/2 @@ -768,7 +773,6 @@ handle_info(_, State) -> terminate(Reason, #state { module = Module, callback_args = Args }) -> Module:handle_terminate(Args, Reason). - code_change(_OldVsn, State, _Extra) -> {ok, State}. @@ -871,7 +875,7 @@ handle_msg({activity, Left, Activity}, Result, fun activity_true/3, fun activity_false/3, Activity3, State2) catch lost_membership -> - {{stop, normal}, State} + {{stop, shutdown}, State} end; handle_msg({activity, _NotLeft, _Activity}, State) -> |
