changeset 9043:3cd01bc784b2

8024867: Enhance logging start up Reviewed-by: mchung, hawtin
author dfuchs
date Mon, 07 Oct 2013 12:09:22 +0200
parents 146dd44703f7
children d0a5383a63ad
files src/share/classes/java/util/logging/LogManager.java
diffstat 1 files changed, 18 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/src/share/classes/java/util/logging/LogManager.java	Mon Oct 07 11:32:48 2013 +0100
+++ b/src/share/classes/java/util/logging/LogManager.java	Mon Oct 07 12:09:22 2013 +0200
@@ -241,6 +241,11 @@
      * retrieved by calling LogManager.getLogManager.
      */
     protected LogManager() {
+        this(checkSubclassPermissions());
+    }
+
+    private LogManager(Void checked) {
+
         // Add a shutdown hook to close the global handlers.
         try {
             Runtime.getRuntime().addShutdownHook(new Cleaner());
@@ -250,6 +255,19 @@
         }
     }
 
+    private static Void checkSubclassPermissions() {
+        final SecurityManager sm = System.getSecurityManager();
+        if (sm != null) {
+            // These permission will be checked in the LogManager constructor,
+            // in order to register the Cleaner() thread as a shutdown hook.
+            // Check them here to avoid the penalty of constructing the object
+            // etc...
+            sm.checkPermission(new RuntimePermission("shutdownHooks"));
+            sm.checkPermission(new RuntimePermission("setContextClassLoader"));
+        }
+        return null;
+    }
+
     /**
      * Lazy initialization: if this instance of manager is the global
      * manager then this method will read the initial configuration and