On Wed, 26 Oct 2022 19:05:50 GMT, Daniel D. Daugherty <dcu...@openjdk.org> 
wrote:

>> Roman Kennke has updated the pull request incrementally with one additional 
>> commit since the last revision:
>> 
>>   Fix has_owner() condition
>
> src/hotspot/share/runtime/objectMonitor.inline.hpp line 62:
> 
>> 60:   void* owner = owner_raw();
>> 61:   return owner != NULL || owner == DEFLATER_MARKER;
>> 62: }
> 
> Why does has_owner() return `true` when `owner == DEFLATER_MARKER`?
> I'm only seeing one caller to the new `has_owner()` function in
> `ThreadService::find_deadlocks_at_safepoint()` and I don't understand why
> that code needs to think `has_owner()` needs to be `true` if the target
> ObjectMonitor is being deflated.
> 
> That new `has_owner()` call will result in calling 
> `Threads::owning_thread_from_monitor()`
> with `waitingToLockMonitor` which is being deflated. So the return from
> `Threads::owning_thread_from_monitor()` will be `NULL` which will result
> in us taking the `num_deadlocks++` code path. If I'm reading this right, then
> we'll report a deflating monitor as being in a deadlock. What am I missing 
> here?

Right, good catch. I got the condition the wrong way. I just pushed a fix.

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

PR: https://git.openjdk.org/jdk/pull/10849

Reply via email to