# HG changeset patch # User dholmes # Date 1539651737 14400 # Node ID 1f4d86a504f240bd8cb08270bd05a44918c47dab # Parent 04d4f1e4aff2acaaee33b538984815684ce03fc6 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 diff -r 04d4f1e4aff2 -r 1f4d86a504f2 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); }