On Wed, 22 Mar 2023 19:06:34 GMT, Serguei Spitsyn <sspit...@openjdk.org> wrote:
>> The fix is to enable support for late binding JVMTI agents. >> The fix includes: >> - New function `JvmtiEnvBase::enable_virtual_threads_notify_jvmti()` which >> does enabling JVMTI VTMS transition notifications in case of agent loaded >> into running VM. This function executes a VM operation counting VTMS >> transition bits in all `JavaThread`'s to correctly set the static counter >> `_VTMS_transition_count` needed for VTMS transition protocol. >> - New function `JvmtiEnvBase::disable_virtual_threads_notify_jvmti()` which >> is needed for testing. It is used by the `WhiteBox` API. >> - New WhiteBox function `WB_SetVirtualThreadsNotifyJvmtiMode(JNIEnv* env, >> jobject wb, jboolean enable)` needed for testing of this update. >> - New regression test: `serviceability/jvmti/vthread/ToggleNotifyJvmtiTest` >> >> Testing: >> - New test: `serviceability/jvmti/vthread/ToggleNotifyJvmtiTest` >> - The originally failed tests are expected to pass now: >> `runtime/vthread/RedefineClass.java` >> `runtime/vthread/TestObjectAllocationSampleEvent.java` >> - In progress: Run the tiers 1-6 to make sure there are no regression. > > Serguei Spitsyn has updated the pull request incrementally with one > additional commit since the last revision: > > minor cleanup in enable_virtual_threads_notify_jvmti() src/hotspot/share/prims/jvmtiExport.cpp line 389: > 387: } else { > 388: JvmtiVTMSTransitionDisabler::set_VTMS_notify_jvmti_events(true); > 389: } One thing that is a little bit confusing about the changes here is that this is where the fix for [JDK-8296324](https://bugs.openjdk.org/browse/JDK-8296324) went, but for some reason the fix for [JDK-8304303](https://bugs.openjdk.org/browse/JDK-8304303), which was pushed a couple of days ago, removed the [JDK-8296324](https://bugs.openjdk.org/browse/JDK-8296324) changes even though these two bugs don't seem related. The code added by [JDK-8296324](https://bugs.openjdk.org/browse/JDK-8296324) was: ``` if (Continuations::enabled()) { // Virtual threads support. There is a performance impact when VTMS transitions are enabled. java_lang_VirtualThread::set_notify_jvmti_events(true); + if (JvmtiEnv::get_phase() == JVMTI_PHASE_LIVE) { + ThreadInVMfromNative __tiv(JavaThread::current()); + java_lang_VirtualThread::init_static_notify_jvmti_events(); + } } ------------- PR Review Comment: https://git.openjdk.org/jdk/pull/13133#discussion_r1145434016