summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJosé Valim <jose.valim@plataformatec.com.br>2017-06-16 12:58:49 +0200
committerJosé Valim <jose.valim@plataformatec.com.br>2017-06-16 12:58:49 +0200
commitb6115dd4aad946c7c809ce1baa8d705338b4fcfd (patch)
treea9c27b2f897f8930ecaac29fc14a8001d684712c
parent5e0756ab3da2cad3190936a2ba3e76edc8056d72 (diff)
downloadelixir-jv-no-down.tar.gz
Keep exit reason as shutdownjv-no-down
-rw-r--r--lib/elixir/lib/kernel/parallel_compiler.ex10
-rw-r--r--lib/elixir/lib/kernel/parallel_require.ex9
2 files changed, 10 insertions, 9 deletions
diff --git a/lib/elixir/lib/kernel/parallel_compiler.ex b/lib/elixir/lib/kernel/parallel_compiler.ex
index 9044c8dce..ffcea6ee8 100644
--- a/lib/elixir/lib/kernel/parallel_compiler.ex
+++ b/lib/elixir/lib/kernel/parallel_compiler.ex
@@ -124,6 +124,7 @@ defmodule Kernel.ParallelCompiler do
end
send(parent, {:file_compiled, self(), file, result})
+ exit(:shutdown)
end
timeout = Keyword.get(options, :long_compilation_threshold, 10) * 1_000
@@ -230,7 +231,7 @@ defmodule Kernel.ParallelCompiler do
spawn_compilers(state)
{:file_compiled, child_pid, file, :ok} ->
- wait_for_down(queued, child_pid)
+ discard_down(child_pid)
if callback = Keyword.get(options, :each_file) do
callback.(file)
@@ -246,7 +247,7 @@ defmodule Kernel.ParallelCompiler do
spawn_compilers(%{state | entries: new_entries, waiting: new_waiting, queued: new_queued})
{:file_compiled, child_pid, file, {kind, reason, stack}} ->
- wait_for_down(queued, child_pid)
+ discard_down(child_pid)
print_error(file, kind, reason, stack)
terminate(queued)
@@ -256,16 +257,15 @@ defmodule Kernel.ParallelCompiler do
end
end
- defp wait_for_down(queued, pid) do
+ defp discard_down(pid) do
receive do
- {:DOWN, ref, :process, ^pid, reason} -> handle_down(queued, ref, reason)
+ {:DOWN, _, :process, ^pid, _} -> :ok
end
end
defp handle_down(_queued, _ref, :normal) do
:ok
end
-
defp handle_down(queued, ref, reason) do
case List.keyfind(queued, ref, 1) do
{_child, ^ref, file, _timer_ref} ->
diff --git a/lib/elixir/lib/kernel/parallel_require.ex b/lib/elixir/lib/kernel/parallel_require.ex
index 6b1b936eb..ccf9e8959 100644
--- a/lib/elixir/lib/kernel/parallel_require.ex
+++ b/lib/elixir/lib/kernel/parallel_require.ex
@@ -64,6 +64,7 @@ defmodule Kernel.ParallelRequire do
end
send(parent, {:file_required, self(), file, result})
+ exit(:shutdown)
end
spawn_requires(files, [{pid, ref} | waiting], callbacks, schedulers, result)
@@ -72,7 +73,7 @@ defmodule Kernel.ParallelRequire do
defp wait_for_messages(files, waiting, callbacks, schedulers, result) do
receive do
{:file_required, pid, file, {:required, mods}} ->
- wait_for_down(waiting, pid)
+ discard_down(pid)
if each_file_callback = callbacks[:each_file] do
each_file_callback.(file)
end
@@ -80,7 +81,7 @@ defmodule Kernel.ParallelRequire do
spawn_requires(files, waiting, callbacks, schedulers, mods ++ result)
{:file_required, pid, _file, {kind, reason, stacktrace}} ->
- wait_for_down(waiting, pid)
+ discard_down(pid)
:erlang.raise(kind, reason, stacktrace)
{:DOWN, ref, :process, pid, reason} ->
@@ -104,9 +105,9 @@ defmodule Kernel.ParallelRequire do
end
end
- defp wait_for_down(waiting, pid) do
+ defp discard_down(pid) do
receive do
- {:DOWN, ref, :process, ^pid, reason} -> handle_down(waiting, pid, ref, reason)
+ {:DOWN, _, :process, ^pid, _} -> :ok
end
end