On Fri, 16 Dec 2022 02:15:38 GMT, David Holmes <dhol...@openjdk.org> wrote:

>> Now the `JvmtiVTMSTransitionDisabler` mechanism supports disabling VTMS 
>> transitions for all virtual threads only. It should also support disabling 
>> transitions for any specific virtual thread as well. This will improve 
>> scalability of the JVMTI functions operating on target virtual threads as 
>> the functions can be executed concurrently without blocking each other 
>> execution when target virtual threads are different.
>> New constructor `JvmtiVTMSTransitionDisabler(jthread vthread)` is added 
>> which has jthread parameter of the target virtual thread.
>> 
>> Testing:
>>   mach5 jobs are TBD (preliminary testing was completed):
>>    - all JVMTI, JDWP, JDI and JDB tests have to be run
>>    - Kitchensink
>>    - tier5
>
> src/hotspot/share/prims/jvmtiThreadState.cpp line 298:
> 
>> 296:   HandleMark hm(thread);
>> 297:   Handle vth = Handle(thread, 
>> JNIHandles::resolve_external_guard(_vthread));
>> 298:   if (!java_lang_VirtualThread::is_instance(vth())) {
> 
> How can this condition not be true? Should it be an assertion?

The JvmtiVTMSTransitionDisabler has to be a no-op for a non-virtual thread.
It is to avoid different branches for virtual and non-virtual cases and use 
this in `jvmtiEnv.cpp`:
`  JvmtiVTMSTransitionDisabler disabler(thread);`
I've added comments that mark no-op cases.

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

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

Reply via email to