diff options
| -rw-r--r-- | src/gm.erl | 5 | ||||
| -rw-r--r-- | test/gm_SUITE.erl | 11 |
2 files changed, 14 insertions, 2 deletions
diff --git a/src/gm.erl b/src/gm.erl index 3554f01d56..985b5bfa6d 100644 --- a/src/gm.erl +++ b/src/gm.erl @@ -757,7 +757,10 @@ handle_info({'DOWN', MRef, process, _Pid, Reason}, catch lost_membership -> {stop, normal, State} - end. + end; +handle_info(_, State) -> + %% Discard any unexpected messages, such as late replies from neighbour_call/2 + noreply(State). terminate(Reason, #state { module = Module, callback_args = Args }) -> Module:handle_terminate(Args, Reason). diff --git a/test/gm_SUITE.erl b/test/gm_SUITE.erl index f5ccf75b70..e4c68a257a 100644 --- a/test/gm_SUITE.erl +++ b/test/gm_SUITE.erl @@ -38,7 +38,8 @@ all() -> broadcast, confirmed_broadcast, member_death, - receive_in_order + receive_in_order, + unexpected_msg ]. init_per_suite(Config) -> @@ -114,6 +115,14 @@ receive_in_order(_Config) -> passed end). +unexpected_msg(_Config) -> + passed = with_two_members( + fun(Pid, _) -> + Pid ! {make_ref(), old_gen_server_answer}, + true = erlang:is_process_alive(Pid), + passed + end). + do_broadcast(Fun) -> with_two_members(broadcast_fun(Fun)). |
