diff options
author | Simon MacMullen <simon@rabbitmq.com> | 2011-07-18 14:51:49 +0100 |
---|---|---|
committer | Simon MacMullen <simon@rabbitmq.com> | 2011-07-18 14:51:49 +0100 |
commit | 1f53bc0a95151a4e9f942682d0723ce2b39d9434 (patch) | |
tree | 50902c192ed3e52790d2e9df4c84b1e2a8aa41c5 | |
parent | a140aab76627a794270dbae6cca0bfe66bd1b97f (diff) | |
download | rabbitmq-server-1f53bc0a95151a4e9f942682d0723ce2b39d9434.tar.gz |
Catch more exit reasons (with a fork of rabbit_misc:with_exit_handler/2).
-rw-r--r-- | src/mirrored_supervisor.erl | 21 |
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. |