On Wed, 9 Oct 2024 22:58:33 GMT, Serguei Spitsyn <sspit...@openjdk.org> wrote:

>> This fixes a problem in the VTMS (Virtual Thread Mount State) transition 
>> frames hiding mechanism.
>> Please, see a fix description in the first comment.
>> 
>> Testing:
>>  - Verified with new test `vthread/CheckHiddenFrames`
>>  - Mach5 tiers 1-6 are passed
>
> Serguei Spitsyn has updated the pull request incrementally with one 
> additional commit since the last revision:
> 
>   Disallow NotifyFramePop for 
> enter/enter0/VirtualThread.run/VThreadContinuation.run

src/hotspot/share/prims/jvmtiEnvBase.cpp line 692:

> 690:   if (jt->is_in_VTMS_transition()) {
> 691:     jvf = check_and_skip_hidden_frames(jt->is_in_VTMS_transition(), jvf);
> 692:   } else if (is_virtual) { // filter out pure continuations

Not sure I follow the logic here.
As far as I understand yield/yield need to be filtered out only for unmounted 
virtual threads. But `is_virtual` here means we have mounted VT?
Looks like almost all callers call this method only if 
`jt->is_in_JTMS_transilition()` is true
Exception is a call from `get_vthread_jvf()` when vthread is mounted.

src/hotspot/share/prims/jvmtiEnvBase.cpp line 703:

> 701:   if (java_lang_VirtualThread::is_instance(vthread)) { // paranoid check 
> for safety
> 702:     if (java_lang_Thread::is_in_VTMS_transition(vthread)) {
> 703:       jvf = 
> check_and_skip_hidden_frames(java_lang_Thread::is_in_VTMS_transition(vthread),
>  jvf);

it's just checked that `java_lang_Thread::is_in_VTMS_transition(vthread)` is 
true
Suggestion:

      jvf = check_and_skip_hidden_frames(true, jvf);

src/hotspot/share/prims/jvmtiEnvBase.cpp line 2025:

> 2023:   // - it is a good invariant when a thread's handshake can't be 
> impacted by a VTMS transition
> 2024:   // - there is no mechanism to disable transitions of a specific 
> carrier thread yet
> 2025:   JvmtiVTMSTransitionDisabler disabler(is_virtual ? target : nullptr); 
> // nullptr is to disable all

We have a number of places with the same issue - `JvmtiVTMSTransitionDisabler 
disabler(target)` when target thread can be virtual or platform.
I think they need to be fixed all together (and most likely as a separate 
issue).
Maybe it would be better to fix disabler itself (check if the thread provided 
is platform and disable transitions for all threads in the case). Then there is 
no need to update all this places when (if) disabling for single platform 
thread is implemented

src/hotspot/share/prims/jvmtiExport.cpp line 1814:

> 1812:   }
> 1813:   // pure continuations have no VTMS transitions but they use methods 
> annotated with JvmtiMountTransition
> 1814:   if ((mh->jvmti_mount_transition() && state->is_virtual()) || 
> thread->is_in_any_VTMS_transition()) {

Could you please explain the change (and other similar changes in 
jvmtiExport.cpp)
Before events were not posted for any `@JvmtiMountTransition` methods, and now 
only for virtual threads? I.e. events for `@JvmtiMountTransition` methods of 
carrier threads are posted?

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

PR Review Comment: https://git.openjdk.org/jdk/pull/21397#discussion_r1801933054
PR Review Comment: https://git.openjdk.org/jdk/pull/21397#discussion_r1801953309
PR Review Comment: https://git.openjdk.org/jdk/pull/21397#discussion_r1801992736
PR Review Comment: https://git.openjdk.org/jdk/pull/21397#discussion_r1802034030

Reply via email to