Skip to content

Commit

Permalink
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
fix double incrementing caller count + allow for raw backtrace retrie…
Browse files Browse the repository at this point in the history
…val for given level
kares committed Mar 10, 2016
1 parent 835caaf commit 8d1083c
Showing 1 changed file with 10 additions and 3 deletions.
13 changes: 10 additions & 3 deletions core/src/main/java/org/jruby/runtime/ThreadContext.java
Original file line number Diff line number Diff line change
@@ -683,6 +683,8 @@ public IRubyObject createCallerBacktrace(int level, Integer length, StackTraceEl
* @return an Array with the backtrace locations
*/
public IRubyObject createCallerLocations(int level, Integer length, StackTraceElement[] stacktrace) {
runtime.incrementCallerCount();

RubyStackTraceElement[] trace = getTraceSubset(level, length, stacktrace);

if (trace == null) return nil;
@@ -691,7 +693,6 @@ public IRubyObject createCallerLocations(int level, Integer length, StackTraceEl
}

private RubyStackTraceElement[] getTraceSubset(int level, Integer length, StackTraceElement[] stacktrace) {
runtime.incrementCallerCount();

if (length != null && length == 0) return RubyStackTraceElement.EMPTY_ARRAY;

@@ -751,8 +752,14 @@ public BacktraceElement[] createBacktrace2(int level, boolean nativeException) {
* @return the backtrace
*/
public BacktraceElement[] getBacktrace() {
BacktraceElement[] newTrace = new BacktraceElement[backtraceIndex + 1];
System.arraycopy(backtrace, 0, newTrace, 0, newTrace.length);
return getBacktrace(0);
}

public final BacktraceElement[] getBacktrace(int level) {
final int len = backtraceIndex + 1;
if ( level < 0 ) level = len + level;
BacktraceElement[] newTrace = new BacktraceElement[len - level];
System.arraycopy(backtrace, level, newTrace, 0, newTrace.length);
return newTrace;
}

0 comments on commit 8d1083c

Please sign in to comment.