On Mon, 11 Sep 2023 21:22:18 GMT, Serguei Spitsyn <sspit...@openjdk.org> wrote:

>> This update fixes two important issues:
>>  - Issue reported by a bug submitter about missing JVMTI events on virtual 
>> threads after an a JVMTI agent dynamic attach
>>  -  Known scalability/performance issue: a need to lazily create 
>> `JvmtiThreadState's` for virtual threads
>> 
>> The issue is tricky to fix because the existing mechanism of the JVMTI event 
>> management does not support unmounted virtual threads. The JVMTI 
>> `SetEventNotificationMode()` calls the function 
>> `JvmtiEventControllerPrivate::recompute_enabled()`
>> which inspects a `JavaThread's` list and for each thread in the list 
>> recomputes enabled event bits with the function 
>> `JvmtiEventControllerPrivate::recompute_thread_enabled()`.  The 
>> `JvmtiThreadState` of each thread is created but only when it is really 
>> needed, eg, if any of the thread filtered events is enabled. There was an 
>> initial adjustment of this mechanism for virtual threads which accounted for 
>> both carrier and virtual threads when a virtual thread is mounted. However, 
>> it does not work for unmounted virtual threads. A temporary work around was 
>> to always create `JvmtiThreadState` for each virtual thread eagerly at a 
>> thread starting point.
>> 
>> This fix introduces new function `JvmtiExport::get_jvmti_thread_state()` 
>> which checks if thread is virtual and there is a thread filtered event 
>> enabled globally, and if so, forces a creation of the `JvmtiThreadState`. 
>> Another adjustment was needed because the function 
>> `state_for_while_locked()` can be called directly in some contexts. New 
>> function `JvmtiEventController::recompute_thread_filtered()` was introduced 
>> to make necessary corrections.
>> 
>> Testing:
>>  - new test from the bug report was adopted: 
>> `test/hotspot/jtreg/serviceability/jvmti/vthread/VThreadEventTest`
>>  - ran mach5 tiers 1-6: all are passed
>
> Serguei Spitsyn has updated the pull request incrementally with one 
> additional commit since the last revision:
> 
>   addressed second round of review comments on VThreadEventTest.java

Leonid and Alex, thank you a lot for review and discussions!

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

PR Comment: https://git.openjdk.org/jdk/pull/15467#issuecomment-1714769193

Reply via email to