RFR: 8175079: Lazy initialization of ImageReader breaks rmid

Alan Bateman Alan.Bateman at oracle.com
Thu Feb 16 16:27:00 UTC 2017


I think go with the first for now.

-Alan


On 16/02/2017 16:24, Claes Redestad wrote:

> 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