OpenJDK / bsd-port / jdk9 / jdk
changeset 3760:4a7da412db38
7001933: Deadlock in java.lang.classloader.getPackage()
Summary: Modified to not holding the "packages" lock when calling parent CL.
Reviewed-by: dholmes, alanb
author | valeriep |
---|---|
date | Tue, 15 Mar 2011 18:42:35 -0700 |
parents | 0ba980dc486e |
children | 8b7f0a3a0b2e |
files | src/share/classes/java/lang/ClassLoader.java |
diffstat | 1 files changed, 19 insertions(+), 11 deletions(-) [+] |
line wrap: on
line diff
--- a/src/share/classes/java/lang/ClassLoader.java Tue Mar 15 13:15:31 2011 +0000 +++ b/src/share/classes/java/lang/ClassLoader.java Tue Mar 15 18:42:35 2011 -0700 @@ -1,5 +1,5 @@ /* - * 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 @@ -1626,20 +1626,28 @@ * @since 1.2 */ protected Package getPackage(String name) { + Package pkg; synchronized (packages) { - Package pkg = packages.get(name); - if (pkg == null) { - if (parent != null) { - pkg = parent.getPackage(name); - } else { - pkg = Package.getSystemPackage(name); - } - if (pkg != null) { - packages.put(name, pkg); + pkg = packages.get(name); + } + if (pkg == null) { + if (parent != null) { + pkg = parent.getPackage(name); + } else { + pkg = Package.getSystemPackage(name); + } + if (pkg != null) { + synchronized (packages) { + Package pkg2 = packages.get(name); + if (pkg2 == null) { + packages.put(name, pkg); + } else { + pkg = pkg2; + } } } - return pkg; } + return pkg; } /**