summaryrefslogtreecommitdiff
path: root/src/gm.erl
diff options
context:
space:
mode:
Diffstat (limited to 'src/gm.erl')
-rw-r--r--src/gm.erl13
1 files changed, 10 insertions, 3 deletions
diff --git a/src/gm.erl b/src/gm.erl
index fd8d9b77..8cf22581 100644
--- a/src/gm.erl
+++ b/src/gm.erl
@@ -931,6 +931,12 @@ join_group(Self, GroupName, #gm_group { members = Members } = Group) ->
prune_or_create_group(Self, GroupName));
Alive ->
Left = lists:nth(random:uniform(length(Alive)), Alive),
+ Handler =
+ fun () ->
+ join_group(
+ Self, GroupName,
+ record_dead_member_in_group(Left, GroupName))
+ end,
try
case gen_server2:call(
Left, {add_on_right, Self}, infinity) of
@@ -940,9 +946,10 @@ join_group(Self, GroupName, #gm_group { members = Members } = Group) ->
catch
exit:{R, _}
when R =:= noproc; R =:= normal; R =:= shutdown ->
- join_group(
- Self, GroupName,
- record_dead_member_in_group(Left, GroupName))
+ Handler();
+ exit:{{R, _}, _}
+ when R =:= nodedown; R =:= shutdown ->
+ Handler()
end
end
end.