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
--- 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);
}