> 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).

Kevin Walls 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 seven additional commits since 
the last revision:

 - comment
 - Merge remote-tracking branch 'upstream/master' into 
8306446_ThreadMXBean_Locks
 - feedback
 - Comment update
 - Update test/jdk/java/lang/management/ThreadMXBean/Locks.java
   
   Co-authored-by: Andrey Turbanov <turban...@gmail.com>
 - condition change
 - 8306446: java/lang/management/ThreadMXBean/Locks.java transient failures

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

Changes:
  - all: https://git.openjdk.org/jdk/pull/14501/files
  - new: https://git.openjdk.org/jdk/pull/14501/files/02ba2a31..2767ed08

Webrevs:
 - full: https://webrevs.openjdk.org/?repo=jdk&pr=14501&range=04
 - incr: https://webrevs.openjdk.org/?repo=jdk&pr=14501&range=03-04

  Stats: 125942 lines in 2425 files changed: 46444 ins; 67914 del; 11584 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