This test iterates an array of ThreadInfos in a few places (e.g. in the method 
doCheck()), and needs to tolerate and ignore nulls, in case a thread finishes 
and the test hits an NPE.

There are other calls like "TM.getThreadInfo(tid).getLockName()" which might 
often be risky, but if the threads are blocked as they are here, they can't be 
terminating, so this usage is safe.


The test has additional problems when started in a virtual thread.  
ThreadMXBean.getThreadInfo() methods only return a ThreadInfo for platform 
threads.  The test needs to avoid some checks if mainThread is virtual.

In assertNoLock, it needs to not object to a thread holding a lock on a 
VirtualThread object is not relevant.
Also the loop in doChecks which follows a chain of locks... This needs to 
recognise that ForkJoinPool thead is not worth pursuing.  It's not one of the 
very narrow set of threads this test cares about.

Despite these exclusions, the test does some reasonable verification work when 
MainThread is virtual.  This test historically cam in with a general "JVM 
monitoring and management API" change, it is not testing a particular fix.


There's a failure condition in doCheck() which will not make the test fail: if 
it logs "TEST FAILED" in its final for loop, there is no failure.  Make the 
loop count the failures, and throw if there are any.

Also, while looking into this...  The variable names in some methods are 
confusing. In checkBlockedObject(), let's use "threadName" rather than "result" 
if we are finding a thread name, and let's not reuse the same result variable 
for a lockName later in the method.

The logs from this test are hard to read and verify, I find it better if the 
lock objects OBJB and OBJC are of classes other than Object, so you get to 
read, e.g.:
LockAThread blocked on Locks$ObjectB@4691fdfd
(ObjectB, not just Object).

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

Commit messages:
 - condition change
 - 8306446: java/lang/management/ThreadMXBean/Locks.java transient failures

Changes: https://git.openjdk.org/jdk/pull/14501/files
 Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=14501&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8306446
  Stats: 51 lines in 1 file changed: 28 ins; 1 del; 22 mod
  Patch: https://git.openjdk.org/jdk/pull/14501.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/14501/head:pull/14501

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

Reply via email to