diff options
| author | Simon MacMullen <simon@rabbitmq.com> | 2014-06-02 14:22:16 +0100 |
|---|---|---|
| committer | Simon MacMullen <simon@rabbitmq.com> | 2014-06-02 14:22:16 +0100 |
| commit | 503ecb21e21c6d7769ea4e128fde553df2ab6f01 (patch) | |
| tree | ac4799d8c7d49d07bdbe3607d1c3ee27e150fcd0 /src | |
| parent | 00689f9af041a667f9404413bd520df40d84092a (diff) | |
| download | rabbitmq-server-git-503ecb21e21c6d7769ea4e128fde553df2ab6f01.tar.gz | |
Better cleanup
Diffstat (limited to 'src')
| -rw-r--r-- | src/gm_qc.erl | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/src/gm_qc.erl b/src/gm_qc.erl index 234e8b1651..77ba1b1836 100644 --- a/src/gm_qc.erl +++ b/src/gm_qc.erl @@ -59,10 +59,25 @@ gm_test(Cmds) -> cleanup(S) -> S2 = ensure_outstanding_msgs_received(drain_proceeding(S)), All = gms(S2), + check_stale_members(All, All), [gm:leave(GM) || GM <- All], [await_death(GM) || GM <- All], + gm:forget_group(?GROUP), ok. +check_stale_members([], _All) -> + ok; +check_stale_members([H|T], All) -> + rabbit_misc:with_exit_handler( + fun () -> check_stale_members(T, All) end, + fun () -> + Members = proplists:get_value(group_members, gm:info(H)), + case Members -- All of + [] -> ok; + Rest -> exit({forgot, Rest}) + end + end). + await_death(P) -> MRef = erlang:monitor(process, P), receive @@ -217,7 +232,6 @@ drain(S) -> end. drain_proceeding(S0) -> - timer:sleep(100), S = #state{instrumented = Msgs} = drain(S0), case dict:size(Msgs) of 0 -> S; @@ -253,7 +267,7 @@ handle_msg({instrumented, From, To, Thing}, S = #state{instrumented = Msgs}) -> S#state{instrumented = dict:store({From, To}, Q1, Msgs)}; handle_msg({'EXIT', _From, normal}, S) -> S; -handle_msg({'EXIT', _From, Reason}, S) -> +handle_msg({'EXIT', _From, Reason}, _S) -> %% We just trapped exits to get nicer SASL logging. exit(Reason). |
