diff options
author | Raimo Niskanen <raimo@erlang.org> | 2019-08-20 17:28:03 +0200 |
---|---|---|
committer | Raimo Niskanen <raimo@erlang.org> | 2019-08-20 17:28:03 +0200 |
commit | 5f10fc12ea8fc6d95d652f81bbbbdc2b18511e87 (patch) | |
tree | 8ff5f5cef9f7756199356158a1122f067b6a7547 | |
parent | 86716445f382abad9b0af4e178ae526015ed074d (diff) | |
download | erlang-5f10fc12ea8fc6d95d652f81bbbbdc2b18511e87.tar.gz |
Log time-outs in crash and get_status
-rw-r--r-- | lib/stdlib/src/gen_statem.erl | 19 | ||||
-rw-r--r-- | lib/stdlib/test/gen_statem_SUITE.erl | 5 |
2 files changed, 20 insertions, 4 deletions
diff --git a/lib/stdlib/src/gen_statem.erl b/lib/stdlib/src/gen_statem.erl index 49911eac2c..d80bccaa02 100644 --- a/lib/stdlib/src/gen_statem.erl +++ b/lib/stdlib/src/gen_statem.erl @@ -807,13 +807,16 @@ format_status( Opt, [PDict,SysState,Parent,Debug, {#params{name = Name} = P, - #state{postponed = Postponed} = S}]) -> + #state{ + postponed = Postponed, + timers = {_TimerRefs, TimeoutTypes}} = S}]) -> Header = gen:format_status_header("Status for state machine", Name), Log = sys:get_log(Debug), [{header,Header}, {data, [{"Status",SysState}, {"Parent",Parent}, + {"Time-outs",{maps:size(TimeoutTypes),maps:keys(TimeoutTypes)}}, {"Logged Events",Log}, {"Postponed",Postponed}]} | case format_status(Opt, PDict, update_parent(P, Parent), S) of @@ -2190,7 +2193,9 @@ error_info( name = Name, callback_mode = CallbackMode, state_enter = StateEnter} = P, - #state{postponed = Postponed} = S, + #state{ + postponed = Postponed, + timers = {_TimerRefs, TimeoutTypes}} = S, Q) -> Log = sys:get_log(Debug), ?LOG_ERROR(#{label=>{gen_statem,terminate}, @@ -2200,6 +2205,7 @@ error_info( callback_mode=>CallbackMode, state_enter=>StateEnter, state=>format_status(terminate, get(), P, S), + timeouts=>{maps:size(TimeoutTypes),maps:keys(TimeoutTypes)}, log=>Log, reason=>{Class,Reason,Stacktrace}, client_info=>client_stacktrace(Q)}, @@ -2238,6 +2244,7 @@ format_log(#{label:={gen_statem,terminate}, callback_mode:=CallbackMode, state_enter:=StateEnter, state:=FmtData, + timeouts:=Timeouts, log:=Log, reason:={Class,Reason,Stacktrace}, client_info:=ClientInfo}) -> @@ -2293,6 +2300,10 @@ format_log(#{label:={gen_statem,terminate}, [] -> ""; _ -> "** Stacktrace =~n** ~tp~n" end ++ + case Timeouts of + {0,_} -> ""; + _ -> "** Time-outs: ~p~n" + end ++ case Log of [] -> ""; _ -> "** Log =~n** ~tp~n" @@ -2317,6 +2328,10 @@ format_log(#{label:={gen_statem,terminate}, [] -> []; _ -> [error_logger:limit_term(FixedStacktrace)] end ++ + case Timeouts of + {0,_} -> []; + _ -> [error_logger:limit_term(Timeouts)] + end ++ case Log of [] -> []; _ -> [[error_logger:limit_term(T) || T <- Log]] diff --git a/lib/stdlib/test/gen_statem_SUITE.erl b/lib/stdlib/test/gen_statem_SUITE.erl index 16cf8f43f9..0318efea2e 100644 --- a/lib/stdlib/test/gen_statem_SUITE.erl +++ b/lib/stdlib/test/gen_statem_SUITE.erl @@ -1,7 +1,7 @@ %% %% %CopyrightBegin% %% -%% Copyright Ericsson AB 2016-2018. All Rights Reserved. +%% Copyright Ericsson AB 2016-2019. All Rights Reserved. %% %% Licensed under the Apache License, Version 2.0 (the "License"); %% you may not use this file except in compliance with the License. @@ -1042,7 +1042,8 @@ generic_timers(_Config) -> sys1(Config) -> {ok,Pid} = gen_statem:start(?MODULE, start_arg(Config, []), []), - {status, Pid, {module,gen_statem}, _} = sys:get_status(Pid), + {status, Pid, {module,gen_statem}, Info} = sys:get_status(Pid), + ct:log("Status info: ~p~n", [Info]), sys:suspend(Pid), Parent = self(), Tag = make_ref(), |