On Tue, 22 Oct 2024 07:39:30 GMT, David Holmes <dhol...@openjdk.org> wrote:

>> Patricio Chilano Mateo has updated the pull request incrementally with six 
>> additional commits since the last revision:
>> 
>>  - Fix comments in objectMonitor.hpp
>>  - Move frame::saved_thread_address() to platform dependent files
>>  - Fix typo in jvmtiExport.cpp
>>  - remove usage of frame::metadata_words in possibly_adjust_frame()
>>  - Fix comments in c2 locking paths
>>  - Revert and simplify changes to c1_Runtime1 on aarch64 and riscv
>
> src/java.base/share/classes/java/lang/VirtualThread.java line 530:
> 
>> 528:                 && carrier == Thread.currentCarrierThread();
>> 529:         carrier.setCurrentThread(carrier);
>> 530:         Thread.setCurrentLockId(this.threadId()); // keep lock ID of 
>> virtual thread
> 
> I'm struggling to understand the different threads in play when this is 
> called and what the method actual does to which threads. ??

A virtual thread is mounted but doing a timed-park that requires temporarily 
switching to the identity of the carrier (identity = Therad.currentThread) when 
queuing the timer task. As mentioned in a reply to Axel, we are close to the 
point of removing this (nothing to do with object monitors of course, we've had 
the complexity with temporary transitions since JDK 19).

More context here is that there isn't support yet for a carrier to own a 
monitor before a virtual thread is mounted, and same thing during these 
temporary transitions. If support for custom schedulers is exposed then that 
issue will need to be addressed as you don't want some entries on the lock 
stack owned by the carrier and the others by the mounted virtual thread. 
Patricio has mentioned inflating any held monitors before mount. There are a 
couple of efforts in this area going on now, all would need that issue fixed 
before anything is exposed.

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

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

Reply via email to