diff options
author | John Högberg <[email protected]> | 2019-05-14 13:39:00 +0200 |
---|---|---|
committer | John Högberg <[email protected]> | 2019-05-14 13:39:00 +0200 |
commit | 416d7690d325f10c20fd7080ef324e76acae11c1 (patch) | |
tree | 63c7dbd024da6e892eb58ec5aaa53b20da71a252 /lib/tools/test | |
parent | 53b76a3b2c1ce19f2eb85d1b788e3c09958fd18a (diff) | |
parent | 656420b64c9207ef5fc25c107b5f4a457b6359bd (diff) | |
download | otp-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')
-rw-r--r-- | lib/tools/test/cover_SUITE.erl | 27 |
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------------------------------------------------------------ |