On Thu, 22 Sep 2022 09:16:28 GMT, Serguei Spitsyn <sspit...@openjdk.org> wrote:
>> There are several places in VirtualThread class implementation where virtual >> threads are being mounted or unmounted, so there is a transition of the >> JavaThread identity from carrier thread to virtual thread and back. The >> execution state in such transitions is inconsistent, and so, has to be >> invisible to JVM TI agents. Such transitions are named as VTMS (virtual >> thread mount state) transitions, and there is a JVM TI mechanism which >> supports them. Besides normal VTMS transitions there are also a couple of >> performance-critical contexts (in `VirtualThread` methods: >> `scheduleUnpark()`, `cancel()` and `unpark()`) which can be named as >> temporary VTMS transitions. Execution state of such temporary VTMS >> transitions has to be also invisible to the JVM TI agent which is >> implemented in the current update. >> >> There are a couple of details of this fix to highlight: >> - A JavaThread which is in temporary VTMS transition is marked with a >> special bit `_is_in_tmp_VTMS_transition`. It is done with the native >> notification method `toggleJvmtiTmpVTMSTrans()`. >> - A couple of lambda form classes can be created in context of temporary >> VTMS transitions, so their `ClassLoad`, `ClassPrepare` and `CFLH` events are >> ignored. >> - Suspending threads in temporary transition is allowed. >> >> The fix was tested in Loom repository by using `JTREG_MAIN_WRAPPER=Virtual` >> mode of execution which forces all main threads to be run as virtual. All >> `JVM TI` and `JDI` tests were run on all platforms. It includes >> `Kitchensink` and `JCK` tests. Additionally, the fix was tested in the jdk >> 20 repository. It includes `JVM TI` and `JDI` tests and tiers 1-6. > > Serguei Spitsyn has updated the pull request incrementally with one > additional commit since the last revision: > > 1. addressed review comments from Chris; added VirtualThread.java update > from Alan Marked as reviewed by lmesnik (Reviewer). ------------- PR: https://git.openjdk.org/jdk/pull/10321