aboutsummaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorJohn Högberg <[email protected]>2018-02-09 10:24:43 +0100
committerJohn Högberg <[email protected]>2018-02-12 13:32:11 +0100
commitab965710d014912cbd3c4ef8f9c3acc0dffa1d30 (patch)
tree6112ec8183b7daf0f70dbd5e6bf976d03bc1a320 /lib
parent9be186620d86b60791f20ddf5d051c63d576e737 (diff)
downloadotp-ab965710d014912cbd3c4ef8f9c3acc0dffa1d30.tar.gz
otp-ab965710d014912cbd3c4ef8f9c3acc0dffa1d30.tar.bz2
otp-ab965710d014912cbd3c4ef8f9c3acc0dffa1d30.zip
Automatically start lcnt server on first use
lcnt:collect is documented as implicitly starting the lcnt server but didn't do so prior to this commit. I've decided to extend this behavior to all operations as the overhead is negligible and it's a bit more convenient to use.
Diffstat (limited to 'lib')
-rw-r--r--lib/tools/src/lcnt.erl7
-rw-r--r--lib/tools/test/lcnt_SUITE.erl8
2 files changed, 11 insertions, 4 deletions
diff --git a/lib/tools/src/lcnt.erl b/lib/tools/src/lcnt.erl
index 139b3d8a4a..20b031a7ad 100644
--- a/lib/tools/src/lcnt.erl
+++ b/lib/tools/src/lcnt.erl
@@ -218,9 +218,11 @@ raw() -> call(raw).
set(Option, Value) -> call({set, Option, Value}).
set({Option, Value}) -> call({set, Option, Value}).
save(Filename) -> call({save, Filename}).
-load(Filename) -> ok = start_internal(), call({load, Filename}).
+load(Filename) -> call({load, Filename}).
-call(Msg) -> gen_server:call(?MODULE, Msg, infinity).
+call(Msg) ->
+ ok = start_internal(),
+ gen_server:call(?MODULE, Msg, infinity).
%% -------------------------------------------------------------------- %%
%%
@@ -237,7 +239,6 @@ apply(Fun) when is_function(Fun) ->
lcnt:apply(Fun, []).
apply(Fun, As) when is_function(Fun) ->
- ok = start_internal(),
Opt = lcnt:rt_opt({copy_save, true}),
lcnt:clear(),
Res = erlang:apply(Fun, As),
diff --git a/lib/tools/test/lcnt_SUITE.erl b/lib/tools/test/lcnt_SUITE.erl
index 146c915087..4a92abb5c8 100644
--- a/lib/tools/test/lcnt_SUITE.erl
+++ b/lib/tools/test/lcnt_SUITE.erl
@@ -30,6 +30,7 @@
t_conflicts/1,
t_locations/1,
t_swap_keys/1,
+ t_implicit_start/1,
smoke_lcnt/1]).
init_per_testcase(_Case, Config) ->
@@ -44,7 +45,7 @@ suite() ->
{timetrap,{minutes,4}}].
all() ->
- [t_load, t_conflicts, t_locations, t_swap_keys,
+ [t_load, t_conflicts, t_locations, t_swap_keys, t_implicit_start,
smoke_lcnt].
%%----------------------------------------------------------------------
@@ -149,6 +150,11 @@ t_swap_keys_file([File|Files]) ->
ok = lcnt:stop(),
t_swap_keys_file(Files).
+%% Prior to OTP-14913 this would crash with 'noproc' as the lcnt server hadn't
+%% been started yet.
+t_implicit_start(Config) when is_list(Config) ->
+ ok = lcnt:conflicts().
+
%% Simple smoke test of actual lock-counting, if running on
%% a run-time with lock-counting enabled.
smoke_lcnt(Config) ->