8048215: [TESTBUG] java/lang/management/ManagementFactory/ThreadMXBeanProxy.java Expected non-null LockInfo
authordholmes
Mon, 15 Oct 2018 21:02:17 -0400
changeset 52133 1f4d86a504f2
parent 52132 04d4f1e4aff2
child 52134 a35cc060f251
8048215: [TESTBUG] java/lang/management/ManagementFactory/ThreadMXBeanProxy.java Expected non-null LockInfo Summary: ensure the target thread has reached wait() before inspecting it Reviewed-by: mchung, dfuchs, jcbeyler
test/jdk/java/lang/management/ManagementFactory/ThreadMXBeanProxy.java
--- a/test/jdk/java/lang/management/ManagementFactory/ThreadMXBeanProxy.java	Mon Oct 15 14:55:17 2018 -0700
+++ b/test/jdk/java/lang/management/ManagementFactory/ThreadMXBeanProxy.java	Mon Oct 15 21:02:17 2018 -0400
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -23,7 +23,7 @@
 
 /*
  * @test
- * @bug     5086470 6358247 7193302
+ * @bug     5086470 6358247 7193302 8048215
  * @summary Test type conversion when invoking ThreadMXBean.dumpAllThreads
  *          through proxy.
  * @author  Mandy Chung
@@ -45,6 +45,7 @@
     private static ThreadMXBean mbean;
     static Mutex mutex = new Mutex();
     static Object lock = new Object();
+    static Object waiter = new Object();
     static MyThread thread = new MyThread();
     public static void main(String[] argv) throws Exception {
         mbean = newPlatformMXBeanProxy(server,
@@ -68,6 +69,12 @@
            }
         }
 
+        // 'thread' holds the mutex, which means it must also have the monitor of
+        // 'waiter' at least until it does the wait(). So we acquire the monitor of
+        // 'waiter' here, which ensures that 'thread' must be in wait()
+        synchronized(waiter) {
+        }
+
         long[] ids = new long[] { thread.getId() };
 
         // validate the local access
@@ -108,11 +115,10 @@
         }
         public void run() {
             synchronized (lock) {
-                mutex.lock();
-                Object o = new Object();
-                synchronized(o) {
+                synchronized(waiter) {
+                    mutex.lock();
                     try {
-                        o.wait();
+                        waiter.wait();
                     } catch (InterruptedException e) {
                         throw new RuntimeException(e);
                     }