On Fri, 31 Jul 2026 12:50:02 GMT, Coleen Phillimore <[email protected]> wrote:

>> src/hotspot/share/services/threadService.cpp line 1044:
>> 
>>> 1042:         owner_desc = "\n  in JNI, which is held by";
>>> 1043:       }
>>> 1044:       currentThread = Threads::owning_thread_from_monitor(t_list, 
>>> waitingToLockMonitor);
>> 
>> Not sure, I fully understand how the variable `currentThread` is used.
>> It seems that it is possible that both `waitingToLockRawMonitor` and 
>> `waitingToLockMonitor` are non-null. So, the `currentThread` can be set at 
>> the line 1025:   `currentThread = JavaThread::cast(owner);`
>> Then this it can be used at line 1041:
>>    `if (!currentThread->current_pending_monitor_is_from_java()) {`
>> and can be reset at line 1044:
>>    `currentThread = Threads::owning_thread_from_monitor(t_list, 
>> waitingToLockMonitor);`
>> 
>> This potential issue was probably before your fix.
>> We may want to file a separate bug if there is an issue here.
>
> It looks like currentThread is reset at the top of the loop, so it doesn't 
> follow the currentThread further.  I think here it just prints it.  Not sure 
> if the detection algorithm can get into a weird state but that might be why 
> raw monitor deadlocks are given precedence when adding to the cycle loop.
> Frankly I don't really follow the details of how the deadlock detection 
> works, but this bit looks okay to me.

I just filed https://bugs.openjdk.org/browse/JDK-8389513.

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

PR Review Comment: https://git.openjdk.org/jdk/pull/32092#discussion_r3690742764

Reply via email to