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

openSUSE Build Service is sponsored by