On Tue, 15 Jul 2025 22:07:40 GMT, Chris Plummer <[email protected]> wrote:
> Fix how ThreadReference.popFrame() and ThreadReference.forceEarlyReturn deal
> with JDWP OPAQUE_FRAME error.
>
> Before virtual threads, OpaqueFrameException did not exist and these API
> always threw NativeMethodException when JDWP OPAQUE_FRAME error was returned.
> For virtual threads OpaqueFrameException was added to handle the case where a
> virtual thread was not suspended at an event, so the JDI implementation was
> updated to throw OpaqueFrameException if it detected that a native method was
> not the cause. It turns out however that JVMTI (and therefore JDWP) can
> return OPAQUE_FRAME error for reasons other than a native method or the
> special virtual thread case, and for platform threads we were incorrectly
> throwing NativeMethodException in these cases. This PR fixes that. For
> platform threads we now only throw NativeMethodException if a native method
> is detected, and otherwise throw OpaqueFrameException.
>
> The spec language is also being cleaned up to better align with JVMTI. Rather
> than calling out all the reasons for OpaqueFrameException, a more generic
> explanation is given.
>
> This is somewhat of a preliminary PR so I can get some feedback. I still need
> to do a CR and complete testing.
It looks good.
I added cleanup suggestion in the implementation
src/jdk.jdi/share/classes/com/sun/tools/jdi/StackFrameImpl.java line 401:
> 399: // previous frame is native, in which case we throw
> NativeMethodException
> 400: for (int i = 0; i < 2; i++) {
> 401: StackFrameImpl sf;
There is nothing implementation-specific here.
I'd suggest to:
- `StackFrameImpl` -> `StackFrame`;
- `MethodImpl` -> `Method`;
- remove `validateStackFrame` at line 408 ('MethodImpl.location()' calls it)
-------------
PR Comment: https://git.openjdk.org/jdk/pull/26335#issuecomment-3076343535
PR Review Comment: https://git.openjdk.org/jdk/pull/26335#discussion_r2208948088