changeset 2869:c529222b0628 icedtea6-1.11.8

Add LogManager regression fixes. 2013-02-17 Andrew John Hughes <gnu.andrew@redhat.com> * Makefile.am: (ICEDTEA_PATCHES): Add new patches. * NEWS: List new patches. * patches/openjdk/8007393.patch, * patches/openjdk/8007611.patch: Regression fixes for LogManager.
author Andrew John Hughes <gnu.andrew@redhat.com>
date Sun, 17 Feb 2013 19:17:52 +0000
parents 333a669397e2
children bc9651b26684
files ChangeLog Makefile.am NEWS patches/openjdk/8007393.patch patches/openjdk/8007611.patch
diffstat 5 files changed, 116 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog	Fri Feb 15 04:55:31 2013 +0000
+++ b/ChangeLog	Sun Feb 17 19:17:52 2013 +0000
@@ -1,3 +1,12 @@
+2013-02-17  Andrew John Hughes  <gnu.andrew@redhat.com>
+
+	* Makefile.am:
+	(ICEDTEA_PATCHES): Add new patches.
+	* NEWS: List new patches.
+	* patches/openjdk/8007393.patch,
+	* patches/openjdk/8007611.patch:
+	Regression fixes for LogManager.
+
 2013-02-15  Andrew John Hughes  <gnu.andrew@redhat.com>
 
 	* configure.ac: Set version to 1.11.8.
--- a/Makefile.am	Fri Feb 15 04:55:31 2013 +0000
+++ b/Makefile.am	Sun Feb 17 19:17:52 2013 +0000
@@ -497,7 +497,9 @@
 	patches/openjdk/8005615-failure_to_load_logger_implementation.patch \
 	patches/openjdk/8004341-jck_dialog_failure.patch \
 	patches/openjdk/8004341-jck_dialog_failure-02.patch \
-	patches/pr1319-support_giflib_5.patch
+	patches/pr1319-support_giflib_5.patch \
+	patches/openjdk/8007393.patch \
+	patches/openjdk/8007611.patch
 
 if WITH_RHINO
 ICEDTEA_PATCHES += \
--- a/NEWS	Fri Feb 15 04:55:31 2013 +0000
+++ b/NEWS	Sun Feb 17 19:17:52 2013 +0000
@@ -18,6 +18,8 @@
   - S8007688: Blacklist known bad certificate
 * Backports
   - S7123519: problems with certification path
+  - S8007393: Possible race condition after JDK-6664509
+  - S8007611: logging behavior in applet changed
 * Bug fixes
   - PR1319: Support GIF lib v5.
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/patches/openjdk/8007393.patch	Sun Feb 17 19:17:52 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	Sun Feb 17 19:17:52 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);
+                 }
+