diff -r e469480420dc -r dbb0e798deeb test/jdk/java/nio/channels/Selector/SelectAndClose.java --- a/test/jdk/java/nio/channels/Selector/SelectAndClose.java Thu Aug 30 17:59:40 2018 -0700 +++ b/test/jdk/java/nio/channels/Selector/SelectAndClose.java Fri Aug 31 10:00:22 2018 +0800 @@ -23,33 +23,18 @@ /* @test * @bug 5004077 8203765 + * @build SelectorUtils + * @run main SelectAndClose * @summary Check blocking of select and close */ import java.io.IOException; -import java.lang.management.ManagementFactory; -import java.lang.management.MonitorInfo; -import java.lang.management.ThreadInfo; import java.nio.channels.Selector; public class SelectAndClose { static Selector selector; static volatile boolean awakened = false; - private static boolean mightHoldLock(Thread t, Object lock) { - long tid = t.getId(); - int hash = System.identityHashCode(lock); - ThreadInfo ti = ManagementFactory.getThreadMXBean(). - getThreadInfo(new long[]{ tid} , true, false, 100)[0]; - if (ti != null) { - for (MonitorInfo mi : ti.getLockedMonitors()) { - if (mi.getIdentityHashCode() == hash) - return true; - } - } - return false; - } - public static void main(String[] args) throws Exception { selector = Selector.open(); @@ -66,12 +51,8 @@ }); selectThread.start(); - // Spin until the monitor of the selected-key set is likely held - // as selected operations are specified to synchronize on the - // selected-key set. - while (!mightHoldLock(selectThread, selector.selectedKeys())) { - Thread.sleep(50); - } + // spin until make sure select is invoked + SelectorUtils.spinUntilLocked(selectThread, selector); // Close the selector. selector.close();