summaryrefslogtreecommitdiff
path: root/erts/emulator/test/dirty_nif_SUITE.erl
diff options
context:
space:
mode:
Diffstat (limited to 'erts/emulator/test/dirty_nif_SUITE.erl')
-rw-r--r--erts/emulator/test/dirty_nif_SUITE.erl29
1 files changed, 27 insertions, 2 deletions
diff --git a/erts/emulator/test/dirty_nif_SUITE.erl b/erts/emulator/test/dirty_nif_SUITE.erl
index 71cfb3f944..fc4c9a514a 100644
--- a/erts/emulator/test/dirty_nif_SUITE.erl
+++ b/erts/emulator/test/dirty_nif_SUITE.erl
@@ -447,10 +447,10 @@ dirty_nif_send_traced(Config) when is_list(Config) ->
{ok, Rcvr} = send_wait_from_dirty_nif(Rcvr),
Parent ! {self(), sent}
end),
- 1 = erlang:trace(Sndr, true, [send]),
+ 1 = erlang:trace(Sndr, true, [send, running, exiting]),
Start = erlang:monotonic_time(),
Sndr ! {self(), go},
- receive {trace, Sndr, send, {ok, Rcvr}, Rcvr} -> ok end,
+
receive {Rcvr, received} -> ok end,
End1 = erlang:monotonic_time(),
Time1 = erlang:convert_time_unit(End1-Start, native, 1000),
@@ -461,8 +461,33 @@ dirty_nif_send_traced(Config) when is_list(Config) ->
Time2 = erlang:convert_time_unit(End2-Start, native, 1000),
io:format("Time2: ~p milliseconds~n", [Time2]),
true = Time2 >= 1900,
+
+ %% Make sure that the send trace is
+ %% in between an in and and out trace
+ (fun F() ->
+ %% We got an in trace, look for out or send
+ {trace,Sndr,in,_} = recv_trace_from(Sndr),
+ case recv_trace_from(Sndr) of
+ {trace,Sndr,out,_} ->
+ %% We got an out, look for another in
+ F();
+ {trace,Sndr,send,_,_} ->
+ %% We got a send, look for another out
+ {trace,Sndr,out,_} = recv_trace_from(Sndr),
+ ok
+ end
+ end)(),
+
ok.
+recv_trace_from(Sndr) ->
+ receive
+ M when element(1, M) =:= trace;
+ element(1, M) =:= trace_ts,
+ element(2, M) =:= Sndr ->
+ M
+ end.
+
dirty_literal_test_code() ->
"
-module(dirty_literal_code_test).