The implementation of the JVM TI `GetObjectMonitorUsage` does not match the 
spec.
The function returns the following structure:

typedef struct {
    jthread owner;
    jint entry_count;
    jint waiter_count;
    jthread* waiters;
    jint notify_waiter_count;
    jthread* notify_waiters;
} jvmtiMonitorUsage;


The following four fields are defined this way:

waiter_count  [jint] The number of threads waiting to own this monitor
waiters  [jthread*] The waiter_count waiting threads
notify_waiter_count  [jint]  The number of threads waiting to be notified by 
this monitor
notify_waiters  [jthread*] The notify_waiter_count threads waiting to be 
notified

The `waiters` has to include all threads waiting to enter the monitor or to 
re-enter it in `Object.wait()`.
The implementation also includes the threads waiting to be notified in 
`Object.wait()` which is wrong.
The `notify_waiters` has to include all threads waiting to be notified in 
`Object.wait()`.
The implementation also includes the threads waiting to re-enter the monitor in 
`Object.wait()` which is wrong.
This update makes it right.

The implementation of the JDWP command `ObjectReference.MonitorInfo (5)` is 
based on the JVM TI `GetObjectMonitorInfo()`. This update has a tweak to keep 
the existing behavior of this command.

The follwoing JVMTI vmTestbase tests are fixed to adopt to the 
`GetObjectMonitorUsage()` correct behavior:

  jvmti/GetObjectMonitorUsage/objmonusage001
  jvmti/GetObjectMonitorUsage/objmonusage003


The following JVMTI JCK tests have to be fixed to adopt to correct behavior:

vm/jvmti/GetObjectMonitorUsage/gomu001/gomu00101/gomu00101.html
vm/jvmti/GetObjectMonitorUsage/gomu001/gomu00101/gomu00101a.html
vm/jvmti/GetObjectMonitorUsage/gomu001/gomu00102/gomu00102.html
vm/jvmti/GetObjectMonitorUsage/gomu001/gomu00102/gomu00102a.html



A JCK bug will be filed and the tests have to be added into the JCK problem 
list located in the closed repository by a separate sub-task before integration 
of this update.

Also, please see and review the related CSR:
 [8324677](https://bugs.openjdk.org/browse/JDK-8324677) Specification 
clarification needed for JVM TI GetObjectMonitorUsage
 
Testing:
 - tested with mach5 tiers 1-6

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

Commit messages:
 - 8324677: Specification clarification needed for JVM TI GetObjectMonitorUsage

Changes: https://git.openjdk.org/jdk/pull/17680/files
 Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=17680&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8324677
  Stats: 25 lines in 5 files changed: 10 ins; 0 del; 15 mod
  Patch: https://git.openjdk.org/jdk/pull/17680.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/17680/head:pull/17680

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

Reply via email to