[prev in list] [next in list] [prev in thread] [next in thread]
List: openjdk-serviceability-dev
Subject: Re: RFR: 8247972: incorrect implementation of JVM TI GetObjectMonitorUsage [v18]
From: Serguei Spitsyn <sspitsyn () openjdk ! org>
Date: 2024-02-29 4:11:24
Message-ID: R_KuuMIt1-k0TLlr8fvRww--8zLxtmRkJhGSbQZ0US0=.90314c56-f8e1-4c15-ae93-d30aae36ee44 () github ! com
[Download RAW message or body]
> 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.
> Also, please see and review the related CSR:
> [8324677](https://bugs.openjdk.org/browse/JDK-8324677): incorrect implementation of \
> JVM TI GetObjectMonitorUsage
> The Release-Note is:
> [8325314](https://bugs.openjdk.org/browse/JDK-8325314): Release Note: incorrect \
> implementation of JVM TI GetObjectMonitorUsage
> Testing:
> - tested with mach5 tiers 1-6
Serguei Spitsyn has updated the pull request with a new target base due to a merge or \
a rebase. The pull request now contains 19 commits:
- resolve merge conflict for deleted file objmonusage003.cpp
- fix a typo in libObjectMonitorUsage.cpp
- fix potential sync gap in the test ObjectMonitorUsage
- improve ObjectMonitorUsage test native agent output
- improved the ObjectMonitorUsage test to make it more elegant
- review: remove test objmonusage003; improve test ObjectMonitorUsage
- review: addressed minor issue with use of []; corrected the test desctiption
- review: addressed comments from David
- fixed minimal build issue
- cloned an nsk/jvmti test to provide test coverage for virtual threads; fixed \
vthread related issue
- ... and 9 more: https://git.openjdk.org/jdk/compare/5fa2bdc6...06711644
-------------
Changes: https://git.openjdk.org/jdk/pull/17680/files
Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=17680&range=17
Stats: 1120 lines in 14 files changed: 684 ins; 389 del; 47 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
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic