diff options
author | John Högberg <[email protected]> | 2019-05-09 15:07:48 +0200 |
---|---|---|
committer | John Högberg <[email protected]> | 2019-05-13 11:45:59 +0200 |
commit | 656420b64c9207ef5fc25c107b5f4a457b6359bd (patch) | |
tree | 933add16b2f3a732f4c0ded0bf4b14141b86d6ee /lib/tools/test | |
parent | a113f6117fd696ea6f84ed754055b4ec97a7ccb2 (diff) | |
download | otp-656420b64c9207ef5fc25c107b5f4a457b6359bd.tar.gz otp-656420b64c9207ef5fc25c107b5f4a457b6359bd.tar.bz2 otp-656420b64c9207ef5fc25c107b5f4a457b6359bd.zip |
cover: Fix register/2 race on startup
Diffstat (limited to 'lib/tools/test')
-rw-r--r-- | lib/tools/test/cover_SUITE.erl | 29 |
1 files changed, 28 insertions, 1 deletions
diff --git a/lib/tools/test/cover_SUITE.erl b/lib/tools/test/cover_SUITE.erl index 161b0105b9..806297abdd 100644 --- a/lib/tools/test/cover_SUITE.erl +++ b/lib/tools/test/cover_SUITE.erl @@ -35,7 +35,8 @@ all() -> distribution, reconnect, die_and_reconnect, dont_reconnect_after_stop, stop_node_after_disconnect, export_import, otp_5031, otp_6115, - otp_8270, otp_10979_hanging_node, otp_14817], + otp_8270, otp_10979_hanging_node, otp_14817, + startup_race], case whereis(cover_server) of undefined -> [coverage,StartStop ++ NoStartStop]; @@ -1742,6 +1743,32 @@ otp_13289(Config) -> ok = file:delete(File), ok. +%% ERL-943; We should not crash on startup when multiple servers race to +%% register the server name. +startup_race(Config) when is_list(Config) -> + PidRefs = [spawn_monitor(fun() -> + case cover:start() of + {error, {already_started, _Pid}} -> + ok; + {ok, _Pid} -> + ok + end + end) || _<- lists:seq(1,8)], + startup_race_1(PidRefs). + +startup_race_1([{Pid, Ref} | PidRefs]) -> + receive + {'DOWN', Ref, process, Pid, normal} -> + startup_race_1(PidRefs); + {'DOWN', Ref, process, Pid, _Other} -> + ct:fail("Cover server crashed on startup.") + after 5000 -> + ct:fail("Timed out.") + end; +startup_race_1([]) -> + cover:stop(), + ok. + %%--Auxiliary------------------------------------------------------------ analyse_expr(Expr, Config) -> |