src/jdk.internal.vm.ci/share/classes/jdk.vm.ci.runtime/src/jdk/vm/ci/runtime/JVMCI.java
Index Unified diffs Context diffs Sdiffs Frames Patch New Old Previous File Next File open Cdiff src/jdk.internal.vm.ci/share/classes/jdk.vm.ci.runtime/src/jdk/vm/ci/runtime/JVMCI.java

src/jdk.internal.vm.ci/share/classes/jdk.vm.ci.runtime/src/jdk/vm/ci/runtime/JVMCI.java

Print this page

        

*** 1,7 **** /* ! * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. --- 1,7 ---- /* ! * Copyright (c) 2015, 2019, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation.
*** 22,63 **** */ package jdk.vm.ci.runtime; import java.util.Formatter; public class JVMCI { ! private static final JVMCIRuntime runtime; ! private static native JVMCIRuntime initializeRuntime(); public static void initialize() { // force static initializer } /** * Gets the singleton {@link JVMCIRuntime} instance available to the application. * * @throws UnsupportedOperationException if JVMCI is not supported */ public static JVMCIRuntime getRuntime() { ! if (runtime == null) { ! String javaHome = System.getProperty("java.home"); ! String vmName = System.getProperty("java.vm.name"); Formatter errorMessage = new Formatter(); errorMessage.format("The VM does not support the JVMCI API.%n"); errorMessage.format("Currently used Java home directory is %s.%n", javaHome); errorMessage.format("Currently used VM configuration is: %s", vmName); throw new UnsupportedOperationException(errorMessage.toString()); } - return runtime; } - - static { - JVMCIRuntime rt = null; - try { - rt = initializeRuntime(); - } catch (UnsatisfiedLinkError e) { } ! runtime = rt; } } --- 22,80 ---- */ package jdk.vm.ci.runtime; import java.util.Formatter; + import jdk.vm.ci.common.NativeImageReinitialize; + import jdk.vm.ci.services.Services; + public class JVMCI { ! /** ! * Singleton instance lazily initialized via double-checked locking. ! */ ! @NativeImageReinitialize private static volatile JVMCIRuntime runtime; ! @NativeImageReinitialize private static boolean initializing; public static void initialize() { // force static initializer } + private static native JVMCIRuntime initializeRuntime(); + /** * Gets the singleton {@link JVMCIRuntime} instance available to the application. * * @throws UnsupportedOperationException if JVMCI is not supported */ public static JVMCIRuntime getRuntime() { ! JVMCIRuntime result = runtime; ! if (result == null) { ! synchronized (JVMCI.class) { ! result = runtime; ! if (result == null) { ! if (initializing) { ! // In recursive call from HotSpotJVMCIRuntime.runtime ! // so no need to re-enter initializeRuntime below. This ! // path is only entered if JVMCI initialization starts ! // with JVMCI.getRuntime(). ! return null; ! } ! initializing = true; ! try { ! runtime = result = initializeRuntime(); ! } catch (UnsatisfiedLinkError e) { ! String javaHome = Services.getSavedProperty("java.home"); ! String vmName = Services.getSavedProperty("java.vm.name"); Formatter errorMessage = new Formatter(); errorMessage.format("The VM does not support the JVMCI API.%n"); errorMessage.format("Currently used Java home directory is %s.%n", javaHome); errorMessage.format("Currently used VM configuration is: %s", vmName); throw new UnsupportedOperationException(errorMessage.toString()); } } } ! } ! return result; } }
src/jdk.internal.vm.ci/share/classes/jdk.vm.ci.runtime/src/jdk/vm/ci/runtime/JVMCI.java
Index Unified diffs Context diffs Sdiffs Frames Patch New Old Previous File Next File