On Wed, 23 Nov 2022 10:14:23 GMT, Serguei Spitsyn <sspit...@openjdk.org> wrote:

>> This problem has two sides.
>> One is that the `VirtualThread::run() `cashes the field `notifyJvmtiEvents` 
>> value.
>> It caused the native method `notifyJvmtiUnmountBegin()` not called after the 
>> field `notifyJvmtiEvents`
>> value has been set to `true` when an agent library is loaded into running VM.
>> The fix is to get rid of this cashing.
>> Another is that enabling `notifyJvmtiEvents` notifications needs a 
>> synchronization.
>> Otherwise, a VTMS transition start can be missed which will cause some 
>> asserts to fire.
>> The fix is to use a JvmtiVTMSTransitionDisabler helper for sync.
>> 
>> Testing:
>> The originally failed tests are passed 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:
> 
>   remove caching if notifyJvmtiEvents in yieldContinuation

Would it be possible to summarize behavior for when an agent enables the 
capability as a virtual thread executes for the first time or it continues 
after yield? More specifically JVMTI will be notified of a mount end without a 
correspond mount begin. It might be that we can narrow this down to if 
finish_VTMS_transition is okay without a preceding start_VTMS_transition.

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

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

Reply via email to