On Thu, 15 Dec 2022 11:51:10 GMT, Serguei Spitsyn <sspit...@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

Seems logical though I'm not familiar with the existing mechanisms. A few minor 
comments.

Thanks.

src/hotspot/share/classfile/javaClasses.cpp line 1745:

> 1743:   int val = VTMS_transition_disable_count(java_thread);
> 1744:   
> java_thread->int_field_put(_jvmti_VTMS_transition_disable_count_offset, val - 
> 1);
> 1745: }

These are not thread-safe functions. What constraints exist for using these 
methods safely?
Update: looks like they must be called with the lock held so we should assert 
that.
Should also assert the count never goes negative (which I assume would be an 
error?).

src/hotspot/share/prims/jvmtiThreadState.cpp line 252:

> 250:     return; // JvmtiVTMSTransitionDisabler is no-op without virtual 
> threads
> 251:   }
> 252:   if (Thread::current_or_null() == NULL) {

Nit: please use `nullptr` in new code

src/hotspot/share/prims/jvmtiThreadState.cpp line 273:

> 271:   }
> 272:   _is_SR = is_SR;
> 273:   _vthread = NULL;

Nit: should initialize in init list

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?

src/hotspot/share/prims/jvmtiThreadState.cpp line 304:

> 302: 
> 303:   ThreadBlockInVM tbivm(thread);
> 304:   MonitorLocker ml(JvmtiVTMSTransition_lock, 
> Mutex::_no_safepoint_check_flag);

Aside: this pattern looks very odd. Why not just lock with the safepoint check?

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

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

Reply via email to