On Fri, 21 Apr 2023 07:58:45 GMT, Serguei Spitsyn <sspit...@openjdk.org> wrote:

>> src/hotspot/share/prims/jvmtiEnv.cpp line 1200:
>> 
>>> 1198:     }
>>> 1199:     if (java_thread == nullptr) { // unmounted virtual thread
>>> 1200:       return JVMTI_ERROR_OPAQUE_FRAME;
>> 
>> Where is the check for "suspended at an event" that otherwise results in 
>> `JVMTI_ERROR_OPAQUE_FRAME`?
>
> The JVMTI `StopThread` spec has this description:
>> The StopThread function may be used to send an asynchronous
>> exception to a virtual thread when it is suspended at an event.
>> An implementation may support sending an asynchronous exception
>> to a suspended virtual thread in other cases.
>> . . .
>> JVMTI_ERROR_OPAQUE_FRAME:
>> The thread is a suspended virtual thread and the implementation 
>> was unable to throw an asynchronous exception from this frame.
> 
> This update supports all suspended mounted cases of virtual threads and 
> returns OPAQUE_FRAME only if the target virtual thread is suspended and 
> unmounted.
> But we avoid using the mount/unmount terms in the JVMTI spec.

What does "suspended at an event" mean? As a programmer trying to use this how 
am I supposed to know when it can be used without getting an error?

I find it very surprising that the error would occur with an unmounted thread - 
having a VT throw when it was remounted seems the most natural way to implement 
this.

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

PR Review Comment: https://git.openjdk.org/jdk/pull/13546#discussion_r1173749491

Reply via email to