diff options
author | José Valim <jose.valim@plataformatec.com.br> | 2017-06-16 12:58:49 +0200 |
---|---|---|
committer | José Valim <jose.valim@plataformatec.com.br> | 2017-06-16 12:58:49 +0200 |
commit | b6115dd4aad946c7c809ce1baa8d705338b4fcfd (patch) | |
tree | a9c27b2f897f8930ecaac29fc14a8001d684712c | |
parent | 5e0756ab3da2cad3190936a2ba3e76edc8056d72 (diff) | |
download | elixir-jv-no-down.tar.gz |
Keep exit reason as shutdownjv-no-down
-rw-r--r-- | lib/elixir/lib/kernel/parallel_compiler.ex | 10 | ||||
-rw-r--r-- | lib/elixir/lib/kernel/parallel_require.ex | 9 |
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 |