On Mon, 6 Oct 2025 22:34:29 GMT, Patricio Chilano Mateo 
<[email protected]> wrote:

>> Please review the following fix. When blocking in 
>> `ObjectMonitor::enter_internal` we currently use timed-park for pinned 
>> virtual threads. This is done to alleviate some potential deadlocks cases 
>> where the successor is an unmounted virtual thread that cannot run. In 
>> particular this could happen during class loading/initialization if all 
>> other carriers are blocked waiting for the same class to be 
>> loaded/initialized.
>> This mechanism should be extended to cover `ObjectMonitor::reenter_internal` 
>> used in `Object.wait` (notification case). Also, the criteria to decide 
>> whether to do a timed-park should be based on whether there are unmounted 
>> vthreads already in the `_entry_list`, and not just if this is a pinned 
>> virtual thread. This covers mixed usages of the same ObjectMonitor between 
>> virtual threads and platform threads. This will become more relevant once we 
>> bring the changes currently in the fibers branch to preempt virtual threads 
>> during klass initialization.
>> 
>> These changes have been running in the loom pipeline for a couple of months 
>> already. I also added a new test case to 
>> test/jdk/java/lang/Thread/virtual/MonitorWaitNotify.java which deadlocks 
>> without these changes.
>> 
>> Thanks,
>> Patricio
>
> Patricio Chilano Mateo has updated the pull request incrementally with one 
> additional commit since the last revision:
> 
>   Move test to RetryMonitorEnterWhenPinned.java and add timed-variants

src/hotspot/share/runtime/objectMonitor.inline.hpp line 147:

> 145: 
> 146: inline void ObjectMonitor::inc_unmounted_vthreads() {
> 147:   assert(_unmounted_vthreads >= 0, "");

Suggestion:

  assert(_unmounted_vthreads >= 0, "invariant");

Here and below - thanks.

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

PR Review Comment: https://git.openjdk.org/jdk/pull/27597#discussion_r2409285515

Reply via email to