On Wed, 23 Oct 2024 20:34:48 GMT, Patricio Chilano Mateo 
<pchilanom...@openjdk.org> wrote:

>> If the virtual thread is un-mounting from the carrier, why do we need to set 
>> the "lock id" back to the virtual thread's id? Sorry I'm finding this quite 
>> confusing.
>> 
>> Also `JavaThread::_lock_id` in the VM means "the java.lang.Thread thread-id 
>> to use for locking" - correct?
>
> Sorry, I should add context on why this is needed. The problem is that inside 
> this temporal transition we could try to acquire some monitor. If the monitor 
> is not inflated we will try to use the LockStack, but the LockStack might be 
> full from monitors the virtual thread acquired before entering this 
> transition. Since the LockStack is full we will try to make room by inflating 
> one or more of the monitors in it [1]. But when inflating the monitors we 
> would be using the j.l.Thread.tid of the carrier (set into _lock_id when 
> switching the identity), which is wrong. We need to use the j.l.Thread.tid of 
> the virtual thread, so we need to change _lock_id back.
> We are not really unmounting the virtual thread, the only thing that we want 
> is to set the identity to the carrier thread so that we don't end up in this 
> nested calls to parkNanos.
> 
> [1] 
> https://github.com/openjdk/jdk/blob/afb62f73499c09f4a7bde6f522fcd3ef1278e526/src/hotspot/share/runtime/lightweightSynchronizer.cpp#L491

> Also JavaThread::_lock_id in the VM means "the java.lang.Thread thread-id to 
> use for locking" - correct?
>
Yes.

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

PR Review Comment: https://git.openjdk.org/jdk/pull/21565#discussion_r1813507846

Reply via email to