From fb99e17d04bddfcb43f54388c93302ea32d60b4a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?John=20H=C3=B6gberg?= <john@erlang.org>
Date: Mon, 4 Dec 2017 10:29:26 +0100
Subject: Fix process name resolution in lcnt results

---
 erts/emulator/beam/erl_bif_info.c |  2 +-
 erts/emulator/test/lcnt_SUITE.erl | 28 ++++++++++++++++++++++++++--
 2 files changed, 27 insertions(+), 3 deletions(-)

(limited to 'erts')

diff --git a/erts/emulator/beam/erl_bif_info.c b/erts/emulator/beam/erl_bif_info.c
index 0547b4d75c..80adca0072 100644
--- a/erts/emulator/beam/erl_bif_info.c
+++ b/erts/emulator/beam/erl_bif_info.c
@@ -4578,7 +4578,7 @@ static Eterm lcnt_build_lock_stats_term(Eterm **hpp, Uint *szp, erts_lcnt_lock_s
 static Eterm lcnt_pretty_print_lock_id(erts_lcnt_lock_info_t *info) {
     Eterm id = info->id;
 
-    if((info->flags & ERTS_LOCK_FLAGS_MASK_TYPE) == ERTS_LOCK_TYPE_PROCLOCK) {
+    if((info->flags & ERTS_LOCK_FLAGS_MASK_TYPE) == ERTS_LOCK_FLAGS_TYPE_PROCLOCK) {
         /* Use registered names as id's for process locks if available. Thread
          * progress is delayed since we may be running on a dirty scheduler. */
         ErtsThrPrgrDelayHandle delay_handle;
diff --git a/erts/emulator/test/lcnt_SUITE.erl b/erts/emulator/test/lcnt_SUITE.erl
index 504b9b54cf..4e52c2813c 100644
--- a/erts/emulator/test/lcnt_SUITE.erl
+++ b/erts/emulator/test/lcnt_SUITE.erl
@@ -28,14 +28,16 @@
      init_per_testcase/2, end_per_testcase/2]).
 
 -export(
-    [toggle_lock_counting/1, error_on_invalid_category/1, preserve_locks/1]).
+    [toggle_lock_counting/1, error_on_invalid_category/1, preserve_locks/1,
+     registered_processes/1, registered_db_tables/1]).
 
 suite() ->
     [{ct_hooks,[ts_install_cth]},
      {timetrap, {seconds, 10}}].
 
 all() ->
-    [toggle_lock_counting, error_on_invalid_category, preserve_locks].
+    [toggle_lock_counting, error_on_invalid_category, preserve_locks,
+     registered_processes, registered_db_tables].
 
 init_per_suite(Config) ->
     case erlang:system_info(lock_counting) of
@@ -154,3 +156,25 @@ preserve_locks(Config) when is_list(Config) ->
 error_on_invalid_category(Config) when is_list(Config) ->
     {error, badarg, q_invalid} = erts_debug:lcnt_control(mask, [q_invalid]),
     ok.
+
+registered_processes(Config) when is_list(Config) ->
+    %% There ought to be at least one registered process (init/code_server)
+    erts_debug:lcnt_control(mask, [process]),
+    [_, {locks, ProcLocks}] = erts_debug:lcnt_collect(),
+    true = lists:any(
+        fun
+            ({proc_main, RegName, _, _}) when is_atom(RegName) -> true;
+            (_Lock) -> false
+        end, ProcLocks),
+    ok.
+
+registered_db_tables(Config) when is_list(Config) ->
+    %% There ought to be at least one registered table (code)
+    erts_debug:lcnt_control(mask, [db]),
+    [_, {locks, DbLocks}] = erts_debug:lcnt_collect(),
+    true = lists:any(
+        fun
+            ({db_tab, RegName, _, _}) when is_atom(RegName) -> true;
+            (_Lock) -> false
+        end, DbLocks),
+    ok.
-- 
cgit v1.2.3