On Tue, 30 Apr 2024 01:49:31 GMT, Serguei Spitsyn <sspit...@openjdk.org> wrote:

>> src/hotspot/share/prims/jvmtiThreadState.cpp line 366:
>> 
>>> 364:           attempts--;
>>> 365:         }
>>> 366:         DEBUG_ONLY(if (attempts == 0) break;)
>> 
>> Previously `_VTMS_transition_count` considered all threads at the same time. 
>> Now you are iterating through the threads and looking at a flag in each one. 
>> Is it guaranteed that once the `_VTMS_transition_mark` flag has been 
>> verified not to be set in a thread it won't get set while still iterating in 
>> the threads loop?
>
> Thank you for the comment. It is thinking in a right direction.
> Each `JavaThread` set the `VTM_transition_mark` only once and then checks for 
> disable counters:
>  - `_VTMS_transition_disable_for_all_count`
>  - `java_lang_Thread::VTMS_transition_disable_count(vth())`
>  
> If any of the disable counters is not zero then each `JavaThread` clears the 
> optimistically set mark and continues under protection of the 
> `JvmtiVTMSTransition_lock`.

I'm not sure this answered Chris' query properly. Or I'm reading Chris' query 
wrong.

Perhaps this is not what Chris had in mind, but I'm wondering what happens in 
some
Thread-A when it is checked and passed by but then Thread-A sets the flag in 
itself
after the for-loop has passed it by. Does that Thread-A flag value get lost?

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

PR Review Comment: https://git.openjdk.org/jdk/pull/18937#discussion_r1597266296

Reply via email to