summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon MacMullen <simon@rabbitmq.com>2014-06-02 14:52:02 +0100
committerSimon MacMullen <simon@rabbitmq.com>2014-06-02 14:52:02 +0100
commita50ca1da5dd78305807c3dca225f69fcc02f2c9b (patch)
treea6ca5a800078d0b5066f2a6b0734cd0d717bacbb
parent503ecb21e21c6d7769ea4e128fde553df2ab6f01 (diff)
downloadrabbitmq-server-git-a50ca1da5dd78305807c3dca225f69fcc02f2c9b.tar.gz
Even better
-rw-r--r--src/gm_qc.erl24
1 files changed, 11 insertions, 13 deletions
diff --git a/src/gm_qc.erl b/src/gm_qc.erl
index 77ba1b1836..2da2ee7921 100644
--- a/src/gm_qc.erl
+++ b/src/gm_qc.erl
@@ -59,24 +59,22 @@ gm_test(Cmds) ->
cleanup(S) ->
S2 = ensure_outstanding_msgs_received(drain_proceeding(S)),
All = gms(S2),
- check_stale_members(All, All),
+ check_stale_members(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).
+check_stale_members(All) ->
+ GMs = [P || P <- processes(), is_gm_process(?GROUP, P)],
+ case GMs -- All of
+ [] -> ok;
+ Rest -> exit({forgot, Rest})
+ end.
+
+is_gm_process(Group, P) ->
+ {dictionary, D} = process_info(P, dictionary),
+ {gm, Group} =:= proplists:get_value(process_name, D).
await_death(P) ->
MRef = erlang:monitor(process, P),