< prev index next >

jdk/src/java.base/share/classes/java/lang/Throwable.java

Print this page

        

*** 22,31 **** --- 22,33 ---- * or visit www.oracle.com if you need additional information or have any * questions. */ package java.lang; + import sun.misc.VM; + import java.io.*; import java.util.*; /** * The {@code Throwable} class is the superclass of all errors and
*** 776,786 **** --- 778,792 ---- * @see java.lang.Throwable#printStackTrace() */ public synchronized Throwable fillInStackTrace() { if (stackTrace != null || backtrace != null /* Out of protocol state */ ) { + if (backtrace == null && StackStreamFactory.useStackTrace(this)) { + backtrace = StackStreamFactory.makeStackTrace(this); + } else { fillInStackTrace(0); + } stackTrace = UNASSIGNED_STACK; } return this; }
*** 817,830 **** private synchronized StackTraceElement[] getOurStackTrace() { // Initialize stack trace field with information from // backtrace if this is the first call to this method if (stackTrace == UNASSIGNED_STACK || (stackTrace == null && backtrace != null) /* Out of protocol state */) { int depth = getStackTraceDepth(); stackTrace = new StackTraceElement[depth]; ! for (int i=0; i < depth; i++) stackTrace[i] = getStackTraceElement(i); } else if (stackTrace == null) { return UNASSIGNED_STACK; } return stackTrace; } --- 823,840 ---- private synchronized StackTraceElement[] getOurStackTrace() { // Initialize stack trace field with information from // backtrace if this is the first call to this method if (stackTrace == UNASSIGNED_STACK || (stackTrace == null && backtrace != null) /* Out of protocol state */) { + if (backtrace instanceof StackStreamFactory.StackTrace) { + stackTrace = ((StackStreamFactory.StackTrace)backtrace).getStackTraceElements(); + } else { int depth = getStackTraceDepth(); stackTrace = new StackTraceElement[depth]; ! for (int i = 0; i < depth; i++) stackTrace[i] = getStackTraceElement(i); + } } else if (stackTrace == null) { return UNASSIGNED_STACK; } return stackTrace; }
< prev index next >