RFR: 8175079: Lazy initialization of ImageReader breaks rmid

Claes Redestad claes.redestad at oracle.com
Thu Feb 16 16:24:27 UTC 2017


Hi,

please review this simple backout of a startup optimization that has 
proven to destabilize things like rmid. Patch inline..

Bug: https://bugs.openjdk.java.net/browse/JDK-8175079

diff -r 87f2a6fb4b9a src/java.base/share/classes/java/lang/System.java
--- a/src/java.base/share/classes/java/lang/System.java    Wed Feb 15 
15:57:18 2017 +0100
+++ b/src/java.base/share/classes/java/lang/System.java    Thu Feb 16 
17:18:49 2017 +0100
@@ -1945,9 +1945,6 @@
          // set security manager
          String cn = System.getProperty("java.security.manager");
          if (cn != null) {
-            // ensure image reader for java.base is initialized before 
security manager
-            Object.class.getResource("module-info.class");
-
              if (cn.isEmpty() || "default".equals(cn)) {
                  System.setSecurityManager(new SecurityManager());
              } else {
diff -r 87f2a6fb4b9a 
src/java.base/share/classes/jdk/internal/module/ModuleBootstrap.java
--- 
a/src/java.base/share/classes/jdk/internal/module/ModuleBootstrap.java 
Wed Feb 15 15:57:18 2017 +0100
+++ 
b/src/java.base/share/classes/jdk/internal/module/ModuleBootstrap.java 
Thu Feb 16 17:18:49 2017 +0100
@@ -115,12 +115,7 @@
          long t0 = System.nanoTime();

          // system modules (may be patched)
-        ModuleFinder systemModules;
-        if (SystemModules.MODULE_NAMES.length > 0) {
-            systemModules = SystemModuleFinder.getInstance();
-        } else {
-            systemModules = ModuleFinder.ofSystem();
-        }
+        ModuleFinder systemModules = ModuleFinder.ofSystem();

          PerfCounters.systemModulesTime.addElapsedTimeFrom(t0);


An alternative patch is to move the force initialization of the image 
reader from initPhase3 to SecurityManager,
which ensures it's initialized before a security manager is installed. 
This preserves the startup optimization in
case a SM is not installed:

diff -r 87f2a6fb4b9a 
src/java.base/share/classes/java/lang/SecurityManager.java
--- a/src/java.base/share/classes/java/lang/SecurityManager.java Wed Feb 
15 15:57:18 2017 +0100
+++ b/src/java.base/share/classes/java/lang/SecurityManager.java Thu Feb 
16 17:23:57 2017 +0100
@@ -233,6 +233,11 @@
  public
  class SecurityManager {

+    static {
+        // ensure image reader for java.base is initialized before 
security
+        // manager is installed
+        Object.class.getResource("module-info.class");
+    }
      /**
       * This field is <code>true</code> if there is a security check in
       * progress; <code>false</code> otherwise.


Thanks!

/Claes



More information about the security-dev mailing list