RFR: 8316417: ObjectMonitorIterator does not return the most recent monitor and is incorrect if no monitors exists [v6]

Axel Boldt-Christmas aboldtch at openjdk.org
Mon Sep 25 10:08:25 UTC 2023


On Mon, 25 Sep 2023 02:08:36 GMT, David Holmes <dholmes at openjdk.org> wrote:

>> Axel Boldt-Christmas has updated the pull request incrementally with one additional commit since the last revision:
>> 
>>   Update copyright year
>
> src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/runtime/ObjectSynchronizer.java line 49:
> 
>> 47:     Type monitorListType = db.lookupType("MonitorList");
>> 48:     Address monitorListAddr = objectSynchronizerType.getField("_in_use_list").getStaticFieldAddress();
>> 49:     inUseListHead = monitorListType.getAddressField("_head").getAddress(monitorListAddr);
> 
> So is `inUseListHead` effectively a "pointer" to the `_head` field of the `_in_use_list` `MonitorList`, which is dereferenced when we read it? Else I'm not seeing how we iterate the current set of in-use monitors.

It is not. It is the value of `_head` when ObjectSynchronizer is initialised. My understanding of the serviceability agent is very limited, but from what I understood the JVM does not run when we are attached. So no code should add to the list. 

If that was a requirement then both this and the previous implementation are completely broken.

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

PR Review Comment: https://git.openjdk.org/jdk/pull/15782#discussion_r1335673227


More information about the serviceability-dev mailing list