changeset 2965:076acbb953a5

Add LogManager regression fixes. 2013-02-17 Andrew John Hughes <gnu.andrew@redhat.com> * Makefile.am: (ICEDTEA_PATCHES): Add new patches. * patches/openjdk/8007393.patch, * patches/openjdk/8007611.patch: Regression fixes for LogManager.
author Andrew John Hughes <gnu.andrew@redhat.com>
date Wed, 06 Mar 2013 19:28:09 +0000
parents 9389cc43b7b8
children 1ecedefb66fa
files ChangeLog Makefile.am patches/openjdk/8007393.patch patches/openjdk/8007611.patch
diffstat 4 files changed, 113 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog	Wed Mar 06 19:22:19 2013 +0000
+++ b/ChangeLog	Wed Mar 06 19:28:09 2013 +0000
@@ -1,3 +1,11 @@
+2013-02-17  Andrew John Hughes  <gnu.andrew@redhat.com>
+
+	* Makefile.am:
+	(ICEDTEA_PATCHES): Add new patches.
+	* patches/openjdk/8007393.patch,
+	* patches/openjdk/8007611.patch:
+	Regression fixes for LogManager.
+
 2013-02-15  Andrew John Hughes  <gnu.andrew@redhat.com>
 
 	* Makefile.am:
--- a/Makefile.am	Wed Mar 06 19:22:19 2013 +0000
+++ b/Makefile.am	Wed Mar 06 19:28:09 2013 +0000
@@ -473,7 +473,9 @@
 	patches/traceable.patch \
 	patches/openjdk/8005615-failure_to_load_logger_implementation.patch \
 	patches/openjdk/8004341-jck_dialog_failure.patch \
-	patches/pr1319-support_giflib_5.patch
+	patches/pr1319-support_giflib_5.patch \
+	patches/openjdk/8007393.patch \
+	patches/openjdk/8007611.patch
 
 if WITH_ALT_HSBUILD
 ICEDTEA_PATCHES += \
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/patches/openjdk/8007393.patch	Wed Mar 06 19:28:09 2013 +0000
@@ -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
+
+--- openjdk/jdk/src/share/classes/java/util/logging/LogManager.java	Tue Feb 05 23:33:50 2013 +0000
++++ openjdk/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;
+         }
+     }
+ 
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/patches/openjdk/8007611.patch	Wed Mar 06 19:28:09 2013 +0000
@@ -0,0 +1,24 @@
+
+# HG changeset patch
+# User coffeys
+# Date 1360861865 0
+# Node ID 25e83b78298b71abb46eb5a337ed7bddef418ca4
+# Parent 828b93329939ec20530ed98f42b2966b2ea53048
+8007611: logging behavior in applet changed
+Reviewed-by: mchung
+
+--- openjdk/jdk/src/share/classes/java/util/logging/LogManager.java	Thu Feb 14 16:50:59 2013 +0000
++++ openjdk/jdk/src/share/classes/java/util/logging/LogManager.java	Thu Feb 14 17:11:05 2013 +0000
+@@ -351,7 +351,10 @@ public class LogManager {
+                         context = userContext;
+                     } else {
+                         context = new LoggerContext();
+-                        context.addLocalLogger(manager.rootLogger);
++                        // during initialization, rootLogger is null when
++                        // instantiating itself RootLogger
++                        if (manager.rootLogger != null)
++                            context.addLocalLogger(manager.rootLogger);
+                     }
+                     javaAwtAccess.put(ecx, LoggerContext.class, context);
+                 }
+