On Fri, 1 Mar 2024 11:19:21 GMT, Serguei Spitsyn <sspit...@openjdk.org> wrote:
>> The implementation of the JVM TI `GetCurrentContendedMonitor()` does not >> match the spec. It can sometimes return an incorrect information about the >> contended monitor. Such a behavior does not match the function spec. >> With this update the `GetCurrentContendedMonitor()` is returning the monitor >> only when the specified thread is waiting to enter or re-enter the monitor, >> and the monitor is not returned when the specified thread is waiting in the >> `java.lang.Object.wait` to be notified. >> >> The implementations of the JDWP `ThreadReference.CurrentContendedMonitor` >> command and JDI `ThreadReference.currentContendedMonitor()` method are based >> and depend on this JVMTI function. The JDWP command and the JDI method were >> specified incorrectly and had incorrect behavior. The fix slightly corrects >> both the JDWP and JDI specs. The JDWP and JDI implementations have been also >> fixed because they use this JVM TI update. Please, see and review the >> related CSR and Release-Note. >> >> CSR: [8326024](https://bugs.openjdk.org/browse/JDK-8326024): JVM TI >> GetCurrentContendedMonitor is implemented incorrectly >> RN: [8326038](https://bugs.openjdk.org/browse/JDK-8326038): Release Note: >> JVM TI GetCurrentContendedMonitor is implemented incorrectly >> >> Testing: >> - tested with the mach5 tiers 1-6 > > Serguei Spitsyn has updated the pull request with a new target base due to a > merge or a rebase. The incremental webrev excludes the unrelated changes > brought in by the merge/rebase. The pull request contains four additional > commits since the last revision: > > - Merge > - Merge > - fix specs: JDWP ThreadReference.CurrentContendedMonitor command, JDI > ThreadReference.currentContendedMonitor method > - 8256314: JVM TI GetCurrentContendedMonitor is implemented incorrectly The main functional fix seems fine. The JDWP and JDI spec changes seem fine - just a minor nit on wording. I don't know enough about how the tests work to comment on those. src/hotspot/share/prims/jvmtiEnvBase.cpp line 941: > 939: bool is_virtual = java_lang_VirtualThread::is_instance(thread_oop); > 940: jint state = is_virtual ? > JvmtiEnvBase::get_vthread_state(thread_oop, java_thread) > 941: : JvmtiEnvBase::get_thread_state(thread_oop, > java_thread); I've seen this in a couple of your PRs now. It would be nice to have a utility function to get the JVMTI thread state of any java.lang.Thread instance. src/java.se/share/data/jdwp/jdwp.spec line 1985: > 1983: "thread may be waiting to enter the object's monitor, or in " > 1984: "java.lang.Object.wait waiting to re-enter the monitor after > being " > 1985: "notified, interrupted, or timeout." `timed-out` would be the correct sense here. src/jdk.jdi/share/classes/com/sun/jdi/ThreadReference.java line 314: > 312: * synchronized method, the synchronized statement, or > 313: * {@link Object#wait} waiting to re-enter the monitor > 314: * after being notified, interrupted, or timeout. Again `timed-out`. ------------- Marked as reviewed by dholmes (Reviewer). PR Review: https://git.openjdk.org/jdk/pull/17944#pullrequestreview-1913493587 PR Review Comment: https://git.openjdk.org/jdk/pull/17944#discussion_r1510673055 PR Review Comment: https://git.openjdk.org/jdk/pull/17944#discussion_r1510665704 PR Review Comment: https://git.openjdk.org/jdk/pull/17944#discussion_r1510666362