summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/supervisor2.erl33
1 files changed, 17 insertions, 16 deletions
diff --git a/src/supervisor2.erl b/src/supervisor2.erl
index 5cb2c301b4..117adde2a8 100644
--- a/src/supervisor2.erl
+++ b/src/supervisor2.erl
@@ -680,10 +680,13 @@ shutdown(Pid, brutal_kill) ->
ok ->
exit(Pid, kill),
receive
- {'DOWN', _MRef, process, Pid, killed} ->
- ok;
{'DOWN', _MRef, process, Pid, OtherReason} ->
- {error, OtherReason}
+ case OtherReason of
+ killed -> ok;
+ normal -> ok;
+ noproc -> ok;
+ _ -> {error, OtherReason}
+ end
end;
{error, Reason} ->
{error, Reason}
@@ -695,12 +698,12 @@ shutdown(Pid, Time) ->
ok ->
exit(Pid, shutdown), %% Try to shutdown gracefully
receive
- {'DOWN', _MRef, process, Pid, Reason} ->
- case Reason of
- normal -> ok;
+ {'DOWN', _MRef, process, Pid, OtherReason} ->
+ case OtherReason of
shutdown -> ok;
+ normal -> ok;
noproc -> ok;
- _ -> {error, Reason}
+ _ -> {error, OtherReason}
end
after Time ->
exit(Pid, kill), %% Force termination.
@@ -727,15 +730,13 @@ monitor_child(Pid) ->
%% If the child dies before the unlik we must empty
%% the mail-box of the 'EXIT'-message and the 'DOWN'-message.
{'EXIT', Pid, Reason} ->
- receive
- {'DOWN', _, process, Pid, _} ->
- case Reason of
- normal -> ok;
- shutdown -> ok;
- noproc -> ok;
- _ -> {error, Reason}
- end
- end
+ case Reason of
+ normal -> ok;
+ _ -> receive
+ {'DOWN', _, process, Pid, _} ->
+ {error, Reason}
+ end
+ end
after 0 ->
%% If a naughty child did unlink and the child dies before
%% monitor the result will be that shutdown/2 receives a