aboutsummaryrefslogtreecommitdiffstats
path: root/lib/tools/test/cover_SUITE.erl
diff options
context:
space:
mode:
authorJohn Högberg <[email protected]>2019-05-14 13:39:00 +0200
committerJohn Högberg <[email protected]>2019-05-14 13:39:00 +0200
commit416d7690d325f10c20fd7080ef324e76acae11c1 (patch)
tree63c7dbd024da6e892eb58ec5aaa53b20da71a252 /lib/tools/test/cover_SUITE.erl
parent53b76a3b2c1ce19f2eb85d1b788e3c09958fd18a (diff)
parent656420b64c9207ef5fc25c107b5f4a457b6359bd (diff)
downloadotp-416d7690d325f10c20fd7080ef324e76acae11c1.tar.gz
otp-416d7690d325f10c20fd7080ef324e76acae11c1.tar.bz2
otp-416d7690d325f10c20fd7080ef324e76acae11c1.zip
Merge branch 'john/tools/fix-cover-register-race/ERL-943/OTP-15813' into maint
* john/tools/fix-cover-register-race/ERL-943/OTP-15813: cover: Fix register/2 race on startup
Diffstat (limited to 'lib/tools/test/cover_SUITE.erl')
-rw-r--r--lib/tools/test/cover_SUITE.erl27
1 files changed, 26 insertions, 1 deletions
diff --git a/lib/tools/test/cover_SUITE.erl b/lib/tools/test/cover_SUITE.erl
index ee58fd7a10..462767f430 100644
--- a/lib/tools/test/cover_SUITE.erl
+++ b/lib/tools/test/cover_SUITE.erl
@@ -37,7 +37,7 @@ all() ->
dont_reconnect_after_stop, stop_node_after_disconnect,
export_import, otp_5031, otp_6115,
otp_8270, otp_10979_hanging_node, otp_14817,
- local_only],
+ local_only, startup_race],
case whereis(cover_server) of
undefined ->
[coverage,StartStop ++ NoStartStop];
@@ -1775,7 +1775,32 @@ local_only(Config) ->
{ok,Name} = test_server:start_node(?FUNCTION_NAME, slave, []),
{error,local_only} = cover:start([Name]),
test_server:stop_node(Name),
+ 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------------------------------------------------------------