diff options
Diffstat (limited to 'java/openjdk6/files/icedtea/openjdk/8007393.patch')
-rw-r--r-- | java/openjdk6/files/icedtea/openjdk/8007393.patch | 78 |
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; + } + } + + |