Skip to content

Commit dd8263a

Browse files
committed
Close resources
1 parent 478ec8a commit dd8263a

File tree

1 file changed

+23
-9
lines changed

1 file changed

+23
-9
lines changed

lib/mix/lib/mix/tasks/deps.parallel.ex

Lines changed: 23 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,20 @@ defmodule Mix.Tasks.Deps.Parallel do
55
## Server
66

77
def server(deps, count, force?) do
8+
{:ok, socket} = :gen_tcp.listen(0, [:binary, packet: :line, active: true, reuseaddr: true])
9+
10+
try do
11+
server(socket, deps, count, force?)
12+
after
13+
:gen_tcp.close(socket)
14+
end
15+
end
16+
17+
defp server(socket, deps, count, force?) do
818
elixir =
919
System.find_executable("elixir") ||
1020
raise "cannot find elixir executable for parallel compilation"
1121

12-
{:ok, socket} = :gen_tcp.listen(0, [:binary, packet: :line, active: true, reuseaddr: true])
1322
{:ok, {ip, port}} = :inet.sockname(socket)
1423
ansi_flag = if IO.ANSI.enabled?(), do: ~c"--color", else: ~c"--no-color"
1524
force_flag = if force?, do: ~c"--force", else: ~c"--no-force"
@@ -53,7 +62,7 @@ defmodule Mix.Tasks.Deps.Parallel do
5362
could not start parallel dependency compiler, no connection made to TCP port: #{inspect(error)}
5463
5564
The spawned operating system process wrote the following output:
56-
#{collect_data(port, "")}
65+
#{close_port(port, "")}
5766
"""
5867
end
5968
end)
@@ -105,11 +114,14 @@ defmodule Mix.Tasks.Deps.Parallel do
105114

106115
{:tcp_closed, socket} ->
107116
shutdown_clients(available ++ busy)
108-
raise "socket #{inspect(socket)} closed unexpectedly"
117+
Mix.shell().error("ERROR! mix deps.parallel #{inspect(socket)} closed unexpectedly")
109118

110119
{:tcp_error, socket, error} ->
111120
shutdown_clients(available ++ busy)
112-
raise "socket #{inspect(socket)} errored: #{inspect(error)}"
121+
122+
Mix.shell().error(
123+
"ERROR! mix deps.parallel #{inspect(socket)} errored: #{inspect(error)}"
124+
)
113125

114126
{port, {:data, {eol, data}}} ->
115127
with %{index: index} <-
@@ -136,16 +148,18 @@ defmodule Mix.Tasks.Deps.Parallel do
136148
end
137149

138150
_ = :gen_tcp.close(socket)
139-
IO.write(collect_data(port, "#{index}> "))
151+
IO.write(close_port(port, "#{index}> "))
140152
end)
141153
end
142154

143-
defp collect_data(port, prefix) do
155+
defp close_port(port, prefix) do
144156
receive do
145-
{^port, {:data, {:eol, data}}} -> [prefix, data, ?\n | collect_data(port, prefix)]
146-
{^port, {:data, {:noeol, data}}} -> [data | collect_data(port, prefix)]
157+
{^port, {:data, {:eol, data}}} -> [prefix, data, ?\n | close_port(port, prefix)]
158+
{^port, {:data, {:noeol, data}}} -> [data | close_port(port, prefix)]
147159
after
148-
0 -> []
160+
0 ->
161+
Port.close(port)
162+
[]
149163
end
150164
end
151165

0 commit comments

Comments
 (0)