[erlang-questions] start_child() on simple_one_for_one supervisor -> {error, {already_started, ...}} ???

Nicolas Charpentier nc@REDACTED
Sun Dec 14 12:19:29 CET 2008


mighty wrote:
> I have a basic simple_one_for_one supervisor that I cannot start
> multiple children from -- the first call to start_child() works, the
> second call to start_child() returns
> {error,{already_started,<0.38.0>}}. My supervisor is
> simple_one_for_one, so I'd expect to hit the ?is_simple() handling of
> start_child in supervisor.erl, which should go through
> supervisor:do_start_child_i() without any fuss, and definitely not
> return {error, {already_started, ...}} out of
> supervisor:handle_start_child().

In your case {error, {already_started, _}} is returned by 
gen_server:start_link/4 (and then returned by supervisor:start_child/2.

gen_server:start_link/4 returns an error because you are trying to 
register 2 processes with the same name (my_node).
Replace the function my_node:start_link/1 with:

start_link(Instance) when is_integer(Instance)->
      Name = atom_to_list(?MODULE) ++ "_" ++ integer_to_list(Instance),
      gen_server:start_link({local, list_to_atom(Name)},?MODULE,[],[]).


Nicolas Charpentier

More information about the erlang-questions mailing list