From df604bab162d155cbb0e980d39c485eeb7b087b3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Valim?= Date: Thu, 28 Sep 2023 12:48:56 +0200 Subject: [PATCH] Remove erl_prim_loader fallback on module lookup This address an issue where paths added via -pa/-pz could never be effectively removed. Closes #6692. --- lib/kernel/src/code_server.erl | 10 ++-------- lib/kernel/test/code_SUITE.erl | 16 ++++++++++++++-- 2 files changed, 16 insertions(+), 10 deletions(-) diff --git a/lib/kernel/src/code_server.erl b/lib/kernel/src/code_server.erl index f420337eb77f..f441ee57bbad 100644 --- a/lib/kernel/src/code_server.erl +++ b/lib/kernel/src/code_server.erl @@ -1200,14 +1200,8 @@ mod_to_bin([{Dir, Cache0}|Tail], ModFile, Acc) -> {false, Cache1} -> mod_to_bin(Tail, ModFile, [{Dir, Cache1} | Acc]) end; -mod_to_bin([], ModFile, Acc) -> - %% At last, try also erl_prim_loader's own method - case erl_prim_loader:get_file(ModFile) of - error -> - {error, lists:reverse(Acc)}; % No more alternatives ! - {ok,Bin,FName} -> - {Bin, absname(FName), lists:reverse(Acc)} - end. +mod_to_bin([], _ModFile, Acc) -> + {error, lists:reverse(Acc)}. with_cache(nocache, _Dir, _ModFile) -> {true, nocache}; diff --git a/lib/kernel/test/code_SUITE.erl b/lib/kernel/test/code_SUITE.erl index 8eadcf9cb3a2..132b89452421 100644 --- a/lib/kernel/test/code_SUITE.erl +++ b/lib/kernel/test/code_SUITE.erl @@ -29,7 +29,8 @@ soft_purge/1, is_loaded/1, all_loaded/1, all_available/1, load_binary/1, dir_req/1, object_code/1, set_path_file/1, upgrade/0, upgrade/1, - sticky_dir/1, pa_pz_option/1, add_del_path/1, + sticky_dir/1, add_del_path/1, + pa_pz_option/1, remove_pa_pz_option/1, dir_disappeared/1, ext_mod_dep/1, clash/1, where_is_file/1, purge_stacktrace/1, mult_lib_roots/1, bad_erl_libs/1, @@ -63,7 +64,8 @@ all() -> delete, purge, purge_many_exits, soft_purge, is_loaded, all_loaded, all_available, load_binary, dir_req, object_code, set_path_file, upgrade, code_path_cache, - sticky_dir, pa_pz_option, add_del_path, dir_disappeared, + pa_pz_option, remove_pa_pz_option, + sticky_dir, add_del_path, dir_disappeared, ext_mod_dep, clash, where_is_file, purge_stacktrace, mult_lib_roots, bad_erl_libs, code_archive, code_archive2, on_load, @@ -782,6 +784,16 @@ pa_pz_option(Config) when is_list(Config) -> [PzDir|_] = lists:reverse(Paths2), peer:stop(Peer2). +%% Test that we can remove paths added via -pa and -pz. +remove_pa_pz_option(Config) when is_list(Config) -> + DDir = proplists:get_value(data_dir,Config), + PaDir = filename:join(DDir,"clash/foobar-0.1/ebin"), + {ok, Peer, Node} = ?CT_PEER(["-pa", PaDir]), + {_,_,_} = rpc:call(Node, code, get_object_code, [blarg]), + true = rpc:call(Node, code, del_path, [PaDir]), + error = rpc:call(Node, code, get_object_code, [blarg]), + peer:stop(Peer). + %% add_path, del_path should not cause priv_dir(App) to fail. add_del_path(Config) when is_list(Config) -> DDir = proplists:get_value(data_dir,Config),