summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon MacMullen <simon@rabbitmq.com>2011-07-18 14:51:49 +0100
committerSimon MacMullen <simon@rabbitmq.com>2011-07-18 14:51:49 +0100
commit1f53bc0a95151a4e9f942682d0723ce2b39d9434 (patch)
tree50902c192ed3e52790d2e9df4c84b1e2a8aa41c5
parenta140aab76627a794270dbae6cca0bfe66bd1b97f (diff)
downloadrabbitmq-server-1f53bc0a95151a4e9f942682d0723ce2b39d9434.tar.gz
Catch more exit reasons (with a fork of rabbit_misc:with_exit_handler/2).
-rw-r--r--src/mirrored_supervisor.erl21
1 files changed, 16 insertions, 5 deletions
diff --git a/src/mirrored_supervisor.erl b/src/mirrored_supervisor.erl
index 78399b84..5d01a56f 100644
--- a/src/mirrored_supervisor.erl
+++ b/src/mirrored_supervisor.erl
@@ -414,11 +414,11 @@ check_start(Delegate, ChildSpec) ->
end.
supervisor(Pid) ->
- try
- gen_server:call(Pid, delegate_supervisor, infinity)
- catch
- exit:{noproc, _} -> dead
- end.
+ with_exit_handler(
+ fun() -> dead end,
+ fun() ->
+ gen_server:call(Pid, delegate_supervisor, infinity)
+ end).
write(ChildSpec) ->
ok = mnesia:write(#mirrored_sup_childspec{id = id(ChildSpec),
@@ -466,3 +466,14 @@ table_definitions() ->
[{Name, [?TABLE_MATCH | Attributes]}].
%%----------------------------------------------------------------------------
+
+with_exit_handler(Handler, Thunk) ->
+ try
+ Thunk()
+ catch
+ exit:{R, _} when R =:= noproc; R =:= nodedown;
+ R =:= normal; R =:= shutdown ->
+ Handler();
+ exit:{{R, _}, _} when R =:= nodedown; R =:= shutdown ->
+ Handler()
+ end.