< prev index next >

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

Print this page
rev 50866 : 8203826: Chain exception from initialization in later NoClassDefFoundErrors.

*** 831,840 **** --- 831,864 ---- } return stackTrace; } /** + * This method is currently only called from the VM for instances of + * ExceptionInInitializerError which are stored for later chaining into a + * NoClassDefFoundError in order to prevent keeping classes from the native + * backtrace alive. + */ + private static void removeNativeBacktrace(Throwable throwable) { + Throwable t = throwable; + while ((t != null)) { + // Triggers the generation of the stack trace elements. + t.getOurStackTrace(); + if (t.suppressedExceptions != null) { + // If there are any suppressed exceptions, + // remove their native backtraces as well. + for (Throwable s : t.suppressedExceptions) { + removeNativeBacktrace(s); + } + } + // Now we don't need the native backtrace any more + t.backtrace = null; + t = t.getCause(); + } + } + + /** * Sets the stack trace elements that will be returned by * {@link #getStackTrace()} and printed by {@link #printStackTrace()} * and related methods. * * This method, which is designed for use by RPC frameworks and other
< prev index next >