[erlang-bugs] Supervisor.erl erroreously reports error when child exits with normal during shutdown

Matthew Sackman <>
Fri Aug 20 17:43:50 CEST 2010


Again, is there anyone who can look at this?

On Thu, Aug 12, 2010 at 12:32:18PM +0100, Matthew Sackman wrote:
> (You can guess what I'm hacking on atm...)
> 
> In supervisor, when it terminates a child, if that child happens to have
> exited fractionally early, with normal, the supervisor reports this as
> an error.
> 
> For permanent children, that's likely the right thing to do, but for all
> other types of children it's wrong and leads to polluted logs. Both
> temporary and transient children do not get restarted on normal
> self-destruction, and nor do they get logged about. Just because they
> happen to destruct as the supervisor is trying to stop them shouldn't
> alter this.
> 
> Diff attached.
> 
> Matthew

> --- /usr/local/lib/erlang/lib/stdlib-1.17/src/supervisor.erl	2010-07-22 14:27:32.000000000 +0100
> +++ supervisor.erl	2010-08-12 12:31:32.000000000 +0100
> @@ -660,14 +660,15 @@
>      Res.
>  
>  do_terminate(Child, SupName) when Child#child.pid =/= undefined ->
> -    case shutdown(Child#child.pid,
> -		  Child#child.shutdown) of
> -	ok ->
> -	    Child#child{pid = undefined};
> -	{error, OtherReason} ->
> -	    report_error(shutdown_error, OtherReason, Child, SupName),
> -	    Child#child{pid = undefined}
> -    end;
> +    case shutdown(Child#child.pid, Child#child.shutdown) of
> +        ok ->
> +            ok;
> +        {error, normal} when Child#child.restart_type =/= permanent ->
> +            ok;
> +        {error, OtherReason} ->
> +            report_error(shutdown_error, OtherReason, Child, SupName)
> +    end,
> +    Child#child{pid = undefined};
>  do_terminate(Child, _SupName) ->
>      Child.
>  
> 

> 
> ________________________________________________________________
> erlang-bugs (at) erlang.org mailing list.
> See http://www.erlang.org/faq.html
> To unsubscribe; mailto:



More information about the erlang-bugs mailing list