File 0363-kernel-Fix-race-in-logger-std-h-SUITE-sync-testcase.patch of Package erlang
From d4008a94759a24e15353feb2bae7c45b13b43b75 Mon Sep 17 00:00:00 2001
From: Lukas Larsson <lukas@erlang.org>
Date: Mon, 3 May 2021 13:46:04 +0200
Subject: [PATCH 5/7] kernel: Fix race in logger std h SUITE sync testcase
Doing dbg:stop_clear does not remove the tracers from the
processes so we do that as an extra step in order to avoid
a race-condition in the testcase.
---
lib/kernel/test/logger_std_h_SUITE.erl | 20 +++++++++++++-------
1 file changed, 13 insertions(+), 7 deletions(-)
diff --git a/lib/kernel/test/logger_std_h_SUITE.erl b/lib/kernel/test/logger_std_h_SUITE.erl
index 3e15c205f0..542a6fae3a 100644
--- a/lib/kernel/test/logger_std_h_SUITE.erl
+++ b/lib/kernel/test/logger_std_h_SUITE.erl
@@ -834,7 +834,7 @@ sync(Config) ->
check_tracer(100),
ok.
sync(cleanup, _Config) ->
- dbg:stop_clear(),
+ stop_clear(),
logger:remove_handler(?MODULE).
write_failure(Config) ->
@@ -1550,7 +1550,7 @@ rotate_on_start_compressed(Config) ->
%% Write a 1 GB file to disk
{ok, D} = file:open(Log,[write]),
- [file:write(D,<<0:(1024*1024*8)>>) || I <- lists:seq(1,1024)],
+ [file:write(D,<<0:(1024*1024*8)>>) || _I <- lists:seq(1,1024)],
file:close(D),
NumOfReqs = 500,
@@ -2086,7 +2086,7 @@ start_op_trace() ->
TRecvPid.
stop_op_trace(TRecvPid) ->
- dbg:stop_clear(),
+ stop_clear(),
unlink(TRecvPid),
exit(TRecvPid, kill),
ok.
@@ -2153,7 +2153,7 @@ start_tracer(Trace,Expected) ->
maps:get(handler_state,
maps:get(cb_state,
logger_olp:info(h_proc_name())))),
- dbg:tracer(process,{fun tracer/2,{Pid,Expected}}),
+ {ok,_} = dbg:tracer(process,{fun tracer/2,{Pid,Expected}}),
dbg:p(whereis(h_proc_name()),[c]),
dbg:p(FileCtrlPid,[c]),
tpl(Trace),
@@ -2167,7 +2167,7 @@ tpl([{{M,F,A},MS}|Trace]) ->
{_,_,1} ->
ok;
_ ->
- dbg:stop_clear(),
+ stop_clear(),
throw({skip,"Can't trace "++atom_to_list(M)++":"++
atom_to_list(F)++"/"++integer_to_list(A)})
end,
@@ -2175,6 +2175,12 @@ tpl([{{M,F,A},MS}|Trace]) ->
tpl([]) ->
ok.
+stop_clear() ->
+ dbg:stop_clear(),
+ %% Remove tracer from all processes in order to eliminate
+ %% race conditions.
+ erlang:trace(all,false,[all]).
+
tracer({trace,_,call,{logger_h_common,handle_cast,[Op|_]}},
{Pid,[{Mod,Func,Op}|Expected]}) ->
maybe_tracer_done(Pid,Expected,{Mod,Func,Op});
@@ -2209,10 +2215,10 @@ check_tracer(T,TimeoutFun) ->
%% traces are received
check_tracer(Delay,fun() -> ok end);
{tracer_got_unexpected,Got,Expected} ->
- dbg:stop_clear(),
+ stop_clear(),
ct:fail({tracer_got_unexpected,Got,Expected})
after T ->
- dbg:stop_clear(),
+ stop_clear(),
TimeoutFun()
end.
--
2.26.2