src/share/classes/java/lang/ClassLoader.java
Print this page
7001933: Deadlock in java.lang.classloader.getPackage()
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 1994, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1994, 2011, 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. Oracle designates this
@@ -1626,25 +1626,30 @@
* <tt>null</tt> if not found
*
* @since 1.2
*/
protected Package getPackage(String name) {
+ Package pkg;
synchronized (packages) {
- Package pkg = packages.get(name);
+ pkg = packages.get(name);
+ }
if (pkg == null) {
if (parent != null) {
pkg = parent.getPackage(name);
} else {
pkg = Package.getSystemPackage(name);
}
if (pkg != null) {
+ synchronized (packages) {
+ if (packages.get(name) != null) {
packages.put(name, pkg);
}
}
- return pkg;
}
}
+ return pkg;
+ }
/**
* Returns all of the <tt>Packages</tt> defined by this class loader and
* its ancestors. </p>
*