diff --git a/lib/elixir/lib/code.ex b/lib/elixir/lib/code.ex index 6a52b73f4d..18f42550f6 100644 --- a/lib/elixir/lib/code.ex +++ b/lib/elixir/lib/code.ex @@ -753,16 +753,10 @@ defmodule Code do def require_file(file, relative_to \\ nil) when is_binary(file) do file = find_file(file, relative_to) - # TODO: Simply block until :required or :proceed once load_file is removed on v2.0 case :elixir_code_server.call({:acquire, file}) do :required -> nil - {:queued, ref} -> - receive do - {:elixir_code_server, ^ref, :required} -> nil - end - :proceed -> loaded = :elixir_compiler.file(file) :elixir_code_server.cast({:required, file}) diff --git a/lib/elixir/src/elixir_code_server.erl b/lib/elixir/src/elixir_code_server.erl index d05fc08b44..62ac0cd71f 100644 --- a/lib/elixir/src/elixir_code_server.erl +++ b/lib/elixir/src/elixir_code_server.erl @@ -45,12 +45,12 @@ handle_call({acquire, Path}, From, Config) -> case maps:find(Path, Current) of {ok, true} -> {reply, required, Config}; - {ok, {Ref, List}} when is_list(List), is_reference(Ref) -> - Queued = maps:put(Path, {Ref, [From | List]}, Current), - {reply, {queued, Ref}, Config#elixir_code_server{required=Queued}}; + {ok, Queued} when is_list(Queued) -> + Required = maps:put(Path, [From | Queued], Current), + {noreply, Config#elixir_code_server{required=Required}}; error -> - Queued = maps:put(Path, {make_ref(), []}, Current), - {reply, proceed, Config#elixir_code_server{required=Queued}} + Required = maps:put(Path, [], Current), + {reply, proceed, Config#elixir_code_server{required=Required}} end; handle_call(required, _From, Config) -> @@ -99,8 +99,8 @@ handle_cast({required, Path}, Config) -> case maps:find(Path, Current) of {ok, true} -> {noreply, Config}; - {ok, {Ref, List}} when is_list(List), is_reference(Ref) -> - _ = [Pid ! {elixir_code_server, Ref, required} || {Pid, _Tag} <- lists:reverse(List)], + {ok, Queued} -> + _ = [gen_server:reply(From, required) || From <- lists:reverse(Queued)], Done = maps:put(Path, true, Current), {noreply, Config#elixir_code_server{required=Done}}; error ->