summaryrefslogtreecommitdiff
path: root/java/openjdk6/files/icedtea/openjdk/8007393.patch
diff options
context:
space:
mode:
Diffstat (limited to 'java/openjdk6/files/icedtea/openjdk/8007393.patch')
-rw-r--r--java/openjdk6/files/icedtea/openjdk/8007393.patch78
1 files changed, 78 insertions, 0 deletions
diff --git a/java/openjdk6/files/icedtea/openjdk/8007393.patch b/java/openjdk6/files/icedtea/openjdk/8007393.patch
new file mode 100644
index 000000000000..632fe1b1cf9a
--- /dev/null
+++ b/java/openjdk6/files/icedtea/openjdk/8007393.patch
@@ -0,0 +1,78 @@
+
+# HG changeset patch
+# User coffeys
+# Date 1360860659 0
+# Node ID 828b93329939ec20530ed98f42b2966b2ea53048
+# Parent cff0241d217f7b463d58ddcd0add8d41de9eb280
+8007393: Possible race condition after JDK-6664509
+Reviewed-by: mchung
+
+--- jdk/src/share/classes/java/util/logging/LogManager.java Tue Feb 05 23:33:50 2013 +0000
++++ jdk/src/share/classes/java/util/logging/LogManager.java Thu Feb 14 16:50:59 2013 +0000
+@@ -411,7 +411,40 @@ public class LogManager {
+ }
+
+ Logger demandSystemLogger(String name, String resourceBundleName) {
+- return systemContext.demandLogger(name, resourceBundleName);
++ // Add a system logger in the system context's namespace
++ final Logger sysLogger = systemContext.demandLogger(name, resourceBundleName);
++
++ // Add the system logger to the LogManager's namespace if not exist
++ // so that there is only one single logger of the given name.
++ // System loggers are visible to applications unless a logger of
++ // the same name has been added.
++ Logger logger;
++ do {
++ // First attempt to call addLogger instead of getLogger
++ // This would avoid potential bug in custom LogManager.getLogger
++ // implementation that adds a logger if not exists
++ if (addLogger(sysLogger)) {
++ // successfully added the new system logger
++ logger = sysLogger;
++ } else {
++ logger = getLogger(name);
++ }
++ } while (logger == null);
++
++ // LogManager will set the sysLogger's handlers via LogManager.addLogger method.
++ if (logger != sysLogger && sysLogger.getHandlers().length == 0) {
++ // if logger already exists but handlers not set
++ final Logger l = logger;
++ AccessController.doPrivileged(new PrivilegedAction<Void>() {
++ public Void run() {
++ for (Handler hdl : l.getHandlers()) {
++ sysLogger.addHandler(hdl);
++ }
++ return null;
++ }
++ });
++ }
++ return sysLogger;
+ }
+
+ // LoggerContext maintains the logger namespace per context.
+@@ -619,22 +652,7 @@ public class LogManager {
+ }
+ } while (result == null);
+ }
+- // Add the system logger to the LogManager's namespace if not exists
+- // The LogManager will set its handlers via the LogManager.addLogger method.
+- if (!manager.addLogger(result) && result.getHandlers().length == 0) {
+- // if logger already exists but handlers not set
+- final Logger l = manager.getLogger(name);
+- final Logger logger = result;
+- AccessController.doPrivileged(new PrivilegedAction<Void>() {
+- public Void run() {
+- for (Handler hdl : l.getHandlers()) {
+- logger.addHandler(hdl);
+- }
+- return null;
+- }
+- });
+- }
+- return result;
++ return result;
+ }
+ }
+
+