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