RFR: 8332923: ObjectMonitorUsage.java failed with unexpected waiter_count [v2]

Serguei Spitsyn sspitsyn at openjdk.org
Thu May 30 00:21:02 UTC 2024


On Tue, 28 May 2024 06:52:13 GMT, SendaoYan <syan at openjdk.org> wrote:

>> Hi all,
>>   ObjectMonitorUsage.java failed with `unexpected waiter_count` after [JDK-8328083](https://bugs.openjdk.org/browse/JDK-8328083) on linux x86_32.
>>   There are two changes in this PR:
>> 1. In JvmtiEnvBase::get_object_monitor_usage function, change from `java_lang_VirtualThread::is_instance(thread_oop)` to `thread_oop->is_a(vmClasses::BaseVirtualThread_klass())`to support the alternative implementation.
>> 2. The JvmtiEnvBase::get_object_monitor_usage does take the vthread into consideration when calculating nWant(mon->contentions()).
>> 
>>   
>> 
>> Additional testing:
>> - [x] linux x86_32 run all testcases in serviceability/jvmti, all testcases run successed expect `serviceability/jvmti/vthread/GetThreadState/GetThreadStateTest.java#default` run failed. This test also run failed before this PR, which has been recorded in [JDK-8333140](https://bugs.openjdk.org/browse/JDK-8333140)
>> - [x] linux x86_64 run all testcases in serviceability/jvmti, all testcases run successed.
>> 
>> [x64.log](https://github.com/openjdk/jdk/files/15480081/x64.log)
>> [x86.log](https://github.com/openjdk/jdk/files/15480083/x86.log)
>
> SendaoYan has updated the pull request incrementally with one additional commit since the last revision:
> 
>   1. java_lang_VirtualThread::is_instance(thread_oop) -> thread_oop->is_a(vmClasses::BaseVirtualThread_klass()); 2. calculating nWant(mon->contentions())

The fix looks good in general but I've inlined one suggestion.

src/hotspot/share/prims/jvmtiEnvBase.cpp line 1524:

> 1522:         nWant_Skip++;
> 1523:       }
> 1524:     }

Thank you for taking care about this issue.
The nWant_Skip and and the fragment with lines 1518-1524 would not be needed if the function `Threads::get_pending_threads()` is fixed instead:

-    if (java_lang_VirtualThread::is_instance(thread_oop)) {
+    if (thread_oop->is_a(vmClasses::BaseVirtualThread_klass())) {
``

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

PR Review: https://git.openjdk.org/jdk/pull/19405#pullrequestreview-2086876665
PR Review Comment: https://git.openjdk.org/jdk/pull/19405#discussion_r1619620594


More information about the serviceability-dev mailing list