diff --git a/jcl/src/java.base/share/classes/java/lang/PinnedThreadPrinter.java b/jcl/src/java.base/share/classes/java/lang/PinnedThreadPrinter.java index a9f6e4c6746..6253fa3f329 100644 --- a/jcl/src/java.base/share/classes/java/lang/PinnedThreadPrinter.java +++ b/jcl/src/java.base/share/classes/java/lang/PinnedThreadPrinter.java @@ -26,26 +26,20 @@ import java.lang.StackWalker.StackFrame; import java.lang.StackWalker.StackFrameImpl; import java.util.List; -import java.util.Set; import java.util.stream.Collectors; -import static java.lang.StackWalker.Option.*; /** - * Prints the stack trace of Pinned Thread that is attempting to yield. + * Prints the stack trace of a pinned thread that is attempting to yield. */ final class PinnedThreadPrinter { - private static final StackWalker STACKWALKER; - static { - STACKWALKER = StackWalker.getInstance(Set.of(SHOW_REFLECT_FRAMES, RETAIN_CLASS_REFERENCE)); - STACKWALKER.setGetMonitorsFlag(); - } + private static final StackWalker STACKWALKER = StackWalker.newInstanceWithMonitors(); static void printStackTrace(PrintStream out, boolean printAll) { out.println(Thread.currentThread()); List stackFrames = STACKWALKER.walk(s -> s.collect(Collectors.toList())); for (int i = 0; i < stackFrames.size(); i++) { - StackFrameImpl sti = (StackFrameImpl)stackFrames.get(i); + StackFrameImpl sti = (StackFrameImpl) stackFrames.get(i); Object[] monitors = sti.getMonitors(); if (monitors != null) { diff --git a/jcl/src/java.base/share/classes/java/lang/StackWalker.java b/jcl/src/java.base/share/classes/java/lang/StackWalker.java index d0085389ed3..32a7c4d4adf 100644 --- a/jcl/src/java.base/share/classes/java/lang/StackWalker.java +++ b/jcl/src/java.base/share/classes/java/lang/StackWalker.java @@ -22,7 +22,6 @@ *******************************************************************************/ package java.lang; -import java.lang.StackWalker.StackFrameImpl; /*[IF JAVA_SPEC_VERSION >= 10]*/ import java.lang.invoke.MethodType; /*[ENDIF] JAVA_SPEC_VERSION >= 10 */ @@ -30,7 +29,6 @@ import java.lang.module.ModuleDescriptor.Version; import java.security.Permission; import java.util.Collections; -import java.util.HashSet; import java.util.List; import java.util.Objects; import java.util.Optional; @@ -57,81 +55,119 @@ public final class StackWalker { private static final int DEFAULT_BUFFER_SIZE = 1; /* Java StackWalker flag constants cloned from java_lang_StackWalker.cpp. */ - private static final int J9_RETAIN_CLASS_REFERENCE = 0x1; - private static final int J9_SHOW_REFLECT_FRAMES = 0x2; - private static final int J9_SHOW_HIDDEN_FRAMES = 0x4; - /* 0x8 flag used by VM constant J9_FRAME_VALID */ + private static final int J9_RETAIN_CLASS_REFERENCE = 0x01; + private static final int J9_SHOW_REFLECT_FRAMES = 0x02; + private static final int J9_SHOW_HIDDEN_FRAMES = 0x04; /*[IF JAVA_SPEC_VERSION >= 21]*/ - /* Internal flag for retrieving monitor info for stack frames. */ - private static final int J9_GET_MONITORS = 0x10; + private static final int J9_GET_MONITORS = 0x08; /*[ENDIF] JAVA_SPEC_VERSION >= 21 */ + /*[IF JAVA_SPEC_VERSION >= 22]*/ + private static final int J9_DROP_METHOD_INFO = 0x10; + /*[ENDIF] JAVA_SPEC_VERSION >= 22 */ - final Set