< prev index next >

test/java/lang/ClassLoader/deadlock/DelegateTest.java

Print this page

        

*** 1,7 **** /* ! * Copyright (c) 2009, 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 * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. --- 1,7 ---- /* ! * Copyright (c) 2009, 2017, 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 * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation.
*** 19,32 **** * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions. */ import java.net.MalformedURLException; import java.net.URL; ! public class Starter implements Runnable { private String id; private DelegatingLoader dl; private String startClass; --- 19,52 ---- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions. */ + /* + * @test + * @bug 4735126 + * @summary (cl) ClassLoader.loadClass locks all instances in chain when delegating + * @modules java.base/java.lang:open + * jdk.compiler + * @library /test/lib + * @build jdk.test.lib.compiler.CompilerUtils + * @run main/othervm -Xlog:class+load DelegateTest one-way + * @run main/othervm -Xlog:class+load DelegateTest cross + */ + + import java.io.File; import java.net.MalformedURLException; import java.net.URL; + import java.nio.file.Path; + import java.nio.file.Paths; + + import jdk.test.lib.compiler.CompilerUtils; ! public class DelegateTest implements Runnable { ! ! private static final Path TEST_DIR = Paths.get(System.getProperty("user.dir", ".")); ! private static final Path SRC_DIR = Paths.get(System.getProperty("test.src"), "src"); private String id; private DelegatingLoader dl; private String startClass;
*** 34,57 **** public static void log(String line) { System.out.println(line); } ! public static void main(String[] args) { ! URL[] urlsa = new URL[1]; ! URL[] urlsb = new URL[1]; try { ! String testDir = System.getProperty("test.classes", "."); ! String sep = System.getProperty("file.separator"); ! urlsa[0] = new URL("file://" + testDir + sep + "SA" + sep); ! urlsb[0] = new URL("file://" + testDir + sep + "SB" + sep); } catch (MalformedURLException e) { e.printStackTrace(); } // Set up Classloader delegation hierarchy ! saLoader = new DelegatingLoader(urlsa); ! sbLoader = new DelegatingLoader(urlsb); String[] saClasses = { "comSA.SupBob", "comSA.Alice" }; String[] sbClasses = { "comSB.SupAlice", "comSB.Bob" }; saLoader.setDelegate(sbClasses, sbLoader); --- 54,78 ---- public static void log(String line) { System.out.println(line); } ! public static void main(String[] args) throws Exception { ! if (!CompilerUtils.compile(SRC_DIR, TEST_DIR)) { ! throw new RuntimeException("Failed to compile " ! + SRC_DIR.toAbsolutePath().toString()); ! } ! ! URL[] url = new URL[1]; try { ! url[0] = new URL("file://" + TEST_DIR + File.separator); } catch (MalformedURLException e) { e.printStackTrace(); } // Set up Classloader delegation hierarchy ! saLoader = new DelegatingLoader(url); ! sbLoader = new DelegatingLoader(url); String[] saClasses = { "comSA.SupBob", "comSA.Alice" }; String[] sbClasses = { "comSB.SupAlice", "comSB.Bob" }; saLoader.setDelegate(sbClasses, sbLoader);
*** 67,81 **** } else { System.out.println("ERROR: unsupported - " + testType); } } ! private static void test(String clsForSA, String clsForSB) { ! Starter ia = new Starter("SA", saLoader, clsForSA); ! Starter ib = new Starter("SB", sbLoader, clsForSB); ! new Thread(ia).start(); ! new Thread(ib).start(); } public static void sleep() { try { Thread.sleep(500); --- 88,106 ---- } else { System.out.println("ERROR: unsupported - " + testType); } } ! private static void test(String clsForSA, String clsForSB) throws InterruptedException { ! DelegateTest ia = new DelegateTest("SA", saLoader, clsForSA); ! DelegateTest ib = new DelegateTest("SB", sbLoader, clsForSB); ! Thread ta = new Thread(ia); ! Thread tb = new Thread(ib); ! ta.start(); ! tb.start(); ! ta.join(); ! tb.join(); } public static void sleep() { try { Thread.sleep(500);
*** 83,93 **** e.printStackTrace(); log("Thread interrupted"); } } ! private Starter(String id, DelegatingLoader dl, String startClass) { this.id = id; this.dl = dl; this.startClass = startClass; } --- 108,118 ---- e.printStackTrace(); log("Thread interrupted"); } } ! private DelegateTest(String id, DelegatingLoader dl, String startClass) { this.id = id; this.dl = dl; this.startClass = startClass; }
< prev index next >