diff options
author | Sverker Eriksson <[email protected]> | 2016-12-20 18:30:12 +0100 |
---|---|---|
committer | GitHub <[email protected]> | 2016-12-20 18:30:12 +0100 |
commit | 420aa50e766560c3316a16695c8c3c1c46138aff (patch) | |
tree | 083586ea689839c088d1529d305093101b3b971c /erts/emulator | |
parent | ac2de409f9379544234f3356974feb2ac15d4818 (diff) | |
parent | 2f8d59aa9e8a96d094172db339fd94aae45a90b5 (diff) | |
download | otp-420aa50e766560c3316a16695c8c3c1c46138aff.tar.gz otp-420aa50e766560c3316a16695c8c3c1c46138aff.tar.bz2 otp-420aa50e766560c3316a16695c8c3c1c46138aff.zip |
Merge pull request #1263 from hawk/hm/stacktrace-depth/OTP-14119
Make depth of current_stacktrace configurable
Diffstat (limited to 'erts/emulator')
-rw-r--r-- | erts/emulator/beam/erl_bif_info.c | 4 | ||||
-rw-r--r-- | erts/emulator/test/process_SUITE.erl | 11 |
2 files changed, 13 insertions, 2 deletions
diff --git a/erts/emulator/beam/erl_bif_info.c b/erts/emulator/beam/erl_bif_info.c index 735aabbee3..88a052cad7 100644 --- a/erts/emulator/beam/erl_bif_info.c +++ b/erts/emulator/beam/erl_bif_info.c @@ -1672,11 +1672,11 @@ current_stacktrace(Process* p, Process* rp, Eterm** hpp) Eterm mfa; Eterm res = NIL; - depth = 8; + depth = erts_backtrace_depth; sz = offsetof(struct StackTrace, trace) + sizeof(BeamInstr *)*depth; s = (struct StackTrace *) erts_alloc(ERTS_ALC_T_TMP, sz); s->depth = 0; - if (rp->i) { + if (depth > 0 && rp->i) { s->trace[s->depth++] = rp->i; depth--; } diff --git a/erts/emulator/test/process_SUITE.erl b/erts/emulator/test/process_SUITE.erl index 0f999e0efe..2289cbabc7 100644 --- a/erts/emulator/test/process_SUITE.erl +++ b/erts/emulator/test/process_SUITE.erl @@ -437,11 +437,22 @@ t_process_info(Config) when is_list(Config) -> verify_loc(Line2, Res2), pi_stacktrace([{?MODULE,t_process_info,1,?LINE}]), + verify_stacktrace_depth(), + Gleader = group_leader(), {group_leader, Gleader} = process_info(self(), group_leader), {'EXIT',{badarg,_Info}} = (catch process_info('not_a_pid')), ok. +verify_stacktrace_depth() -> + CS = current_stacktrace, + OldDepth = erlang:system_flag(backtrace_depth, 0), + {CS,[]} = erlang:process_info(self(), CS), + _ = erlang:system_flag(backtrace_depth, 8), + {CS,[{?MODULE,verify_stacktrace_depth,0,_},_|_]} = + erlang:process_info(self(), CS), + _ = erlang:system_flag(backtrace_depth, OldDepth). + pi_stacktrace(Expected0) -> {Line,Res} = {?LINE,erlang:process_info(self(), current_stacktrace)}, {current_stacktrace,Stack} = Res, |