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