On 13.10.2015 20:12, Martin Buchholz wrote:
blockFinalizerThread looks buggy to me.

  103     private static void blockFinalizerThread() throws
InterruptedException {
  104         System.out.println("trying to block the finalizer thread");
  105         o1 = new MyObject();
  106         o1 = null;
  107         System.gc();
  108         System.runFinalization();
  109         finRunLatch.await();
  110     }
Why are you calling System.runFinalization() ?  You are trying to block
the primary finalizer thread; you definitely don't want the object to be
handled by the secondary finalizer thread.

Indeed. Even though this seems unlikely (didn't hit the problem in 500 repetitions) it will be better not to call System.runFinalization() and just let System.gc() do its job finalizing the collected instance.


---

   51             } else {
   52                 System.out.println("finalizing the test instance");
I would check :

else if (Thread.currentThread().getName().equals("Secondary finalizer")) {
   ....
else fail(unexpected finalizer thread name)

If this ever happens it would mean that the finalizer logic has been changed. Adding this check will make the test fail in such case and force re-examination of the test logic. Sounds fair.

http://cr.openjdk.java.net/~jbachorik/8135188/webrev.04

Thanks!

-JB-




Reply via email to