# HG changeset patch # User michaelm # Date 1246284315 -3600 # Node ID 5e93bd389012f715db88d82b7e0c1ab3a6f77544 # Parent 0175bbf9a83392c498398ec11eb217aa0e915563 6827999: 6827999: URLClassLoader.addURL(URL) adds URLs to closed class loader Reviewed-by: chegar diff -r 0175bbf9a833 -r 5e93bd389012 jdk/src/share/classes/sun/misc/URLClassPath.java --- a/jdk/src/share/classes/sun/misc/URLClassPath.java Mon Jun 29 13:10:33 2009 +0100 +++ b/jdk/src/share/classes/sun/misc/URLClassPath.java Mon Jun 29 15:05:15 2009 +0100 @@ -135,7 +135,9 @@ * If the URL specified is null or is already in the list of * URLs, then invoking this method has no effect. */ - public void addURL(URL url) { + public synchronized void addURL(URL url) { + if (closed) + return; synchronized (urls) { if (url == null || path.contains(url)) return; diff -r 0175bbf9a833 -r 5e93bd389012 jdk/test/java/net/URLClassLoader/B6827999.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/java/net/URLClassLoader/B6827999.java Mon Jun 29 15:05:15 2009 +0100 @@ -0,0 +1,68 @@ +/* + * Copyright 2006 Sun Microsystems, Inc. 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. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. + */ + +/* + * @test + * @bug 6827999 + * @run main/othervm B6827999 + * @summary Fix for 6827999 + */ + +import java.net.*; +import java.io.*; + +/** + */ + +public class B6827999 +{ + public static void main(String[] args) throws Exception { + + URL[] urls = new URL[] {new URL("http://foobar.jar") }; + MyURLClassLoader ucl = new MyURLClassLoader(urls); + + ucl.addURL(new URL("http://foo/bar.jar")); + urls = ucl.getURLs(); + + if (urls.length != 2) + throw new RuntimeException("Failed:(1)"); + ucl.close(); + + ucl.addURL(new URL("http://foo.bar/bar.jar")); + + if (ucl.getURLs().length != 2) { + throw new RuntimeException("Failed:(2)"); + } + + } + + static class MyURLClassLoader extends URLClassLoader { + public MyURLClassLoader(URL[] urls) { + super(urls); + } + public void addURL(URL url) { + super.addURL(url); + } + } + +}