diff options
author | Tim Watson <tim@rabbitmq.com> | 2013-03-04 14:20:33 +0000 |
---|---|---|
committer | Tim Watson <tim@rabbitmq.com> | 2013-03-04 14:20:33 +0000 |
commit | 30d4a9ae902c8a8ee9593a4ff603bda06563fbd0 (patch) | |
tree | 85d058b4e50d68f9a95abe8065034344d6ad1f90 | |
parent | 84da16816bd189a730398e05706f7b89f8c6f544 (diff) | |
download | rabbitmq-server-30d4a9ae902c8a8ee9593a4ff603bda06563fbd0.tar.gz |
rebase with R16B
-rw-r--r-- | src/supervisor2.erl | 25 |
1 files changed, 15 insertions, 10 deletions
diff --git a/src/supervisor2.erl b/src/supervisor2.erl index 693e0b6d..3f807573 100644 --- a/src/supervisor2.erl +++ b/src/supervisor2.erl @@ -186,7 +186,9 @@ %%% SupName = {local, atom()} | {global, atom()}. %%% --------------------------------------------------- -ifdef(use_specs). --type startlink_err() :: {'already_started', pid()} | 'shutdown' | term(). +-type startlink_err() :: {'already_started', pid()} + | {'shutdown', term()} + | term(). -type startlink_ret() :: {'ok', pid()} | 'ignore' | {'error', startlink_err()}. -spec start_link(Module, Args) -> startlink_ret() when @@ -331,8 +333,10 @@ cast(Supervisor, Req) -> -ifdef(use_specs). -type init_sup_name() :: sup_name() | 'self'. --type stop_rsn() :: 'shutdown' | {'bad_return', {module(),'init', term()}} - | {'bad_start_spec', term()} | {'start_spec', term()} +-type stop_rsn() :: {'shutdown', term()} + | {'bad_return', {module(),'init', term()}} + | {'bad_start_spec', term()} + | {'start_spec', term()} | {'supervisor_data', term()}. -spec init({init_sup_name(), module(), [term()]}) -> @@ -363,9 +367,9 @@ init_children(State, StartSpec) -> case start_children(Children, SupName) of {ok, NChildren} -> {ok, State#state{children = NChildren}}; - {error, _, NChildren} -> + {error, NChildren, Reason} -> terminate_children(NChildren, SupName), - {stop, shutdown} + {stop, {shutdown, Reason}} end; Error -> {stop, {start_spec, Error}} @@ -385,9 +389,9 @@ init_dynamic(_State, StartSpec) -> %% Func: start_children/2 %% Args: Children = [child_rec()] in start order %% SupName = {local, atom()} | {global, atom()} | {pid(), Mod} -%% Purpose: Start all children. The new list contains #child's +%% Purpose: Start all children. The new list contains #child's %% with pids. -%% Returns: {ok, NChildren} | {error, NChildren} +%% Returns: {ok, NChildren} | {error, NChildren, Reason} %% NChildren = [child_rec()] in termination order (reversed %% start order) %%----------------------------------------------------------------- @@ -403,7 +407,8 @@ start_children([Child|Chs], NChildren, SupName) -> start_children(Chs, [Child#child{pid = Pid}|NChildren], SupName); {error, Reason} -> report_error(start_error, Reason, Child, SupName), - {error, Reason, lists:reverse(Chs) ++ [Child | NChildren]} + {error, lists:reverse(Chs) ++ [Child | NChildren], + {failed_to_start_child,Child#child.name,Reason}} end; start_children([], NChildren, _SupName) -> {ok, NChildren}. @@ -963,7 +968,7 @@ restart(rest_for_one, Child, State) -> case start_children(ChAfter2, State#state.name) of {ok, ChAfter3} -> {ok, State#state{children = ChAfter3 ++ ChBefore}}; - {error, Reason, ChAfter3} -> + {error, ChAfter3, Reason} -> NChild = Child#child{pid=restarting(Child#child.pid)}, NState = State#state{children = ChAfter3 ++ ChBefore}, {try_again, Reason, replace_child(NChild,NState)} @@ -974,7 +979,7 @@ restart(one_for_all, Child, State) -> case start_children(Children2, State#state.name) of {ok, NChs} -> {ok, State#state{children = NChs}}; - {error, Reason, NChs} -> + {error, NChs, Reason} -> NChild = Child#child{pid=restarting(Child#child.pid)}, NState = State#state{children = NChs}, {try_again, Reason, replace_child(NChild,NState)} |