aboutsummaryrefslogtreecommitdiffstats
path: root/erts/emulator/test/timer_bif_SUITE.erl
diff options
context:
space:
mode:
authorBjörn Gustavsson <[email protected]>2017-06-07 16:43:44 +0200
committerBjörn Gustavsson <[email protected]>2017-06-07 16:43:44 +0200
commit2cd892c67dcb8d88e33decc2f92cf4bc776497ad (patch)
treee47829ba4dd70af7509c16420e8eab8ecd4bf418 /erts/emulator/test/timer_bif_SUITE.erl
parent76137cbf49487e07bfcd72d5789bdfde7ef50a92 (diff)
parent46b62dea54a230e46bbadfec7f119ff5ab513e6a (diff)
downloadotp-2cd892c67dcb8d88e33decc2f92cf4bc776497ad.tar.gz
otp-2cd892c67dcb8d88e33decc2f92cf4bc776497ad.tar.bz2
otp-2cd892c67dcb8d88e33decc2f92cf4bc776497ad.zip
Merge branch 'bjorn/cuddle-with-tests'
* bjorn/cuddle-with-tests: Stabilize call_with_huge_message_queue/1 same_time_yielding/1: Avoid failing if there are many schedulers Remove obsolete old_scheduler_SUITE Robustify process_SUITE:spawn_opt_max_heap_size/1 Contain damage cause by spawn_opt_max_heap_size failing Make bulk_send_bigbig/1 purely informational distribution_SUITE: Refactor bulk_send_bigbig/1 receive_SUITE: Remove ?line macros Lengthen too short timetraps Fix process_SUITE:low_prio/1
Diffstat (limited to 'erts/emulator/test/timer_bif_SUITE.erl')
-rw-r--r--erts/emulator/test/timer_bif_SUITE.erl24
1 files changed, 20 insertions, 4 deletions
diff --git a/erts/emulator/test/timer_bif_SUITE.erl b/erts/emulator/test/timer_bif_SUITE.erl
index 7cbd93a0f3..a977eb41c4 100644
--- a/erts/emulator/test/timer_bif_SUITE.erl
+++ b/erts/emulator/test/timer_bif_SUITE.erl
@@ -488,24 +488,40 @@ registered_process(Config) when is_list(Config) ->
same_time_yielding(Config) when is_list(Config) ->
Mem = mem(),
+ Ref = make_ref(),
SchdlrsOnln = erlang:system_info(schedulers_online),
Tmo = erlang:monotonic_time(millisecond) + 3000,
Tmrs = lists:map(fun (I) ->
process_flag(scheduler, (I rem SchdlrsOnln) + 1),
- erlang:start_timer(Tmo, self(), hej, [{abs, true}])
+ erlang:start_timer(Tmo, self(), Ref, [{abs, true}])
end,
lists:seq(1, (?TIMEOUT_YIELD_LIMIT*3+1)*SchdlrsOnln)),
true = mem_larger_than(Mem),
- lists:foreach(fun (Tmr) -> receive {timeout, Tmr, hej} -> ok end end, Tmrs),
+ receive_all_timeouts(length(Tmrs), Ref),
Done = erlang:monotonic_time(millisecond),
true = Done >= Tmo,
+ MsAfterTmo = Done - Tmo,
+ io:format("Done ~p ms after Tmo\n", [MsAfterTmo]),
case erlang:system_info(build_type) of
- opt -> true = Done < Tmo + 200;
- _ -> true = Done < Tmo + 1000
+ opt ->
+ true = MsAfterTmo < 200;
+ _ ->
+ true = MsAfterTmo < 1000
end,
Mem = mem(),
ok.
+%% Read out all timeouts in receive queue order. This is efficient
+%% even if there are very many messages.
+
+receive_all_timeouts(0, _Ref) ->
+ ok;
+receive_all_timeouts(N, Ref) ->
+ receive
+ {timeout, _Tmr, Ref} ->
+ receive_all_timeouts(N-1, Ref)
+ end.
+
same_time_yielding_with_cancel(Config) when is_list(Config) ->
same_time_yielding_with_cancel_test(false, false).