--- a/jdk/src/share/classes/java/util/logging/LogManager.java Mon Oct 07 11:32:48 2013 +0100
+++ b/jdk/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