diff options
author | Matthias Radestock <matthias@rabbitmq.com> | 2012-04-27 11:10:49 +0100 |
---|---|---|
committer | Matthias Radestock <matthias@rabbitmq.com> | 2012-04-27 11:10:49 +0100 |
commit | c2ca5bc723b437bb233eb03e4d227b623eedc59a (patch) | |
tree | 6c4087ac2c33f5b217bd4c76009e497dcbf66659 | |
parent | f8b4195ff276c5c4aec64a09b317a24c76447efd (diff) | |
download | rabbitmq-server-bug24911.tar.gz |
properly ignore dynamic children that return 'ignore' from init/1bug24911
thus preventing an explosion on supervisor shutdown when we would
otherwise trip over unlinking an 'undefined' pid.
-rw-r--r-- | src/supervisor2.erl | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/src/supervisor2.erl b/src/supervisor2.erl index f1b74878..3d3623d7 100644 --- a/src/supervisor2.erl +++ b/src/supervisor2.erl @@ -411,6 +411,8 @@ handle_call({start_child, EArgs}, _From, State) when ?is_simple(State) -> #child{mfa = {M, F, A}} = hd(State#state.children), Args = A ++ EArgs, case do_start_child_i(M, F, Args) of + {ok, undefined} -> + {reply, {ok, undefined}, State}; {ok, Pid} -> NState = State#state{dynamics = ?DICT:store(Pid, Args, State#state.dynamics)}, @@ -743,6 +745,8 @@ restart(Strategy, Child, State, Restart) #child{mfa = {M, F, A}} = Child, Dynamics = ?DICT:erase(Child#child.pid, State#state.dynamics), case do_start_child_i(M, F, A) of + {ok, undefined} -> + {ok, State}; {ok, Pid} -> NState = State#state{dynamics = ?DICT:store(Pid, A, Dynamics)}, {ok, NState}; |