File 0827-erts-Fail-tests-when-disable_lock_counting-fails.patch of Package erlang

From c2efc811a9ffab2778faf82fe72d947019173532 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?John=20H=C3=B6gberg?= <john@erlang.org>
Date: Mon, 16 Sep 2019 12:33:37 +0200
Subject: [PATCH] erts: Fail tests when disable_lock_counting() fails

Failing in init_per_testcase hid the errors since failed inits
are auto-skipped, so we'll move the checks into the tests proper
instead.
---
 erts/emulator/test/lcnt_SUITE.erl | 27 ++++++++++++++++-----------
 1 file changed, 16 insertions(+), 11 deletions(-)

diff --git a/erts/emulator/test/lcnt_SUITE.erl b/erts/emulator/test/lcnt_SUITE.erl
index 2dbaec9942..7bee7cf1d4 100644
--- a/erts/emulator/test/lcnt_SUITE.erl
+++ b/erts/emulator/test/lcnt_SUITE.erl
@@ -24,8 +24,7 @@
 
 -export(
     [all/0, suite/0,
-     init_per_suite/1, end_per_suite/1,
-     init_per_testcase/2, end_per_testcase/2]).
+     init_per_suite/1, end_per_suite/1]).
 
 -export(
     [toggle_lock_counting/1, error_on_invalid_category/1, preserve_locks/1,
@@ -63,13 +62,6 @@ end_per_suite(Config) ->
     erts_debug:lcnt_clear(),
     ok.
 
-init_per_testcase(_Case, Config) ->
-    disable_lock_counting(),
-    Config.
-
-end_per_testcase(_Case, _Config) ->
-    ok.
-
 disable_lock_counting() ->
     ok = erts_debug:lcnt_control(copy_save, false),
     ok = erts_debug:lcnt_control(mask, []),
@@ -96,7 +88,10 @@ wait_for_empty_lock_list(Tries) when Tries > 0 ->
             wait_for_empty_lock_list(Tries - 1)
     end;
 wait_for_empty_lock_list(0) ->
-    ct:fail("Lock list failed to clear after disabling lock counting.").
+    [{duration, _}, {locks, Locks0}] = erts_debug:lcnt_collect(),
+    Locks = remove_untoggleable_locks(Locks0),
+    ct:fail("Lock list failed to clear after disabling lock counting.~n\t~p",
+            [Locks]).
 
 %% Queue up a lot of thread progress cleanup ops in a vain attempt to
 %% flush the lock list.
@@ -109,6 +104,8 @@ try_flush_cleanup_ops() ->
 %%
 
 toggle_lock_counting(Config) when is_list(Config) ->
+    ok = disable_lock_counting(),
+
     Categories =
         [allocator, db, debug, distribution, generic, io, process, scheduler],
     lists:foreach(
@@ -131,6 +128,8 @@ get_lock_info_for(Category) when is_atom(Category) ->
     get_lock_info_for([Category]).
 
 preserve_locks(Config) when is_list(Config) ->
+    ok = disable_lock_counting(),
+
     erts_debug:lcnt_control(mask, [process]),
 
     erts_debug:lcnt_control(copy_save, true),
@@ -155,10 +154,14 @@ preserve_locks(Config) when is_list(Config) ->
     end.
 
 error_on_invalid_category(Config) when is_list(Config) ->
+    ok = disable_lock_counting(),
+
     {error, badarg, q_invalid} = erts_debug:lcnt_control(mask, [q_invalid]),
     ok.
 
 registered_processes(Config) when is_list(Config) ->
+    ok = disable_lock_counting(),
+
     %% There ought to be at least one registered process (init/code_server)
     erts_debug:lcnt_control(mask, [process]),
     [_, {locks, ProcLocks}] = erts_debug:lcnt_collect(),
@@ -170,6 +173,8 @@ registered_processes(Config) when is_list(Config) ->
     ok.
 
 registered_db_tables(Config) when is_list(Config) ->
+    ok = disable_lock_counting(),
+
     %% There ought to be at least one registered table (code)
     erts_debug:lcnt_control(mask, [db]),
     [_, {locks, DbLocks}] = erts_debug:lcnt_collect(),
-- 
2.16.4

openSUSE Build Service is sponsored by