RFR: 8316456: StackWalker may skip Continuation::yield0 frame mistakenly

Mandy Chung mchung at openjdk.org
Mon Sep 18 23:07:01 UTC 2023


`JVM_MoreStackWalk` has a bug that always assumes that the Java frame
stream is currently at the frame decoded in the last patch and so always
advances to the next frame before filling in the new batch of stack frame.
However `JVM_MoreStackWalk` may return 0.  The library will set 
the continuation to its parent. It then call `JVM_MoreStackWalk` to continue
the stack walking but the last decoded frame has already been advanced.
The Java frame stream is already at the top frame of the parent continuation. .
The current implementation skips "Continuation::yield0" mistakenly.  This
only happens with `-XX:+ShowHiddenFrames` or `StackWalker.Option.SHOW_HIDDEN_FRAMES`.

The fix is to pass the number of frames decoded in the last batch to `JVM_MoreStackWalk`
so that the VM will determine if the current frame should be skipped or not.

`test/jdk/jdk/internal/vm/Continuation/Scoped.java` test now correctly checks
the expected result where "yield0" exists between "enter" and "run" frames.

-------------

Commit messages:
 - 8316456: StackWalker may skip Continuation::yield0 frame mistakenly

Changes: https://git.openjdk.org/jdk/pull/15804/files
 Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=15804&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8316456
  Stats: 128 lines in 7 files changed: 36 ins; 11 del; 81 mod
  Patch: https://git.openjdk.org/jdk/pull/15804.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/15804/head:pull/15804

PR: https://git.openjdk.org/jdk/pull/15804


More information about the core-libs-dev mailing list