--- old/src/hotspot/share/compiler/compileBroker.cpp 2019-05-04 16:22:10.143488933 -0700 +++ new/src/hotspot/share/compiler/compileBroker.cpp 2019-05-04 16:22:08.890487065 -0700 @@ -70,7 +70,6 @@ #if INCLUDE_JVMCI #include "jvmci/jvmciEnv.hpp" #include "jvmci/jvmciRuntime.hpp" -#include "runtime/vframe.hpp" #endif #ifdef COMPILER2 #include "opto/c2compiler.hpp" @@ -1063,20 +1062,22 @@ } #if INCLUDE_JVMCI - if (UseJVMCICompiler && blocking && !UseJVMCINativeLibrary) { + if (UseJVMCICompiler && blocking) { // Don't allow blocking compiles for requests triggered by JVMCI. if (thread->is_Compiler_thread()) { blocking = false; } - // Don't allow blocking compiles if inside a class initializer or while performing class loading - vframeStream vfst((JavaThread*) thread); - for (; !vfst.at_end(); vfst.next()) { - if (vfst.method()->is_static_initializer() || - (vfst.method()->method_holder()->is_subclass_of(SystemDictionary::ClassLoader_klass()) && - vfst.method()->name() == vmSymbols::loadClass_name())) { - blocking = false; - break; + if (!UseJVMCINativeLibrary) { + // Don't allow blocking compiles if inside a class initializer or while performing class loading + vframeStream vfst((JavaThread*) thread); + for (; !vfst.at_end(); vfst.next()) { + if (vfst.method()->is_static_initializer() || + (vfst.method()->method_holder()->is_subclass_of(SystemDictionary::ClassLoader_klass()) && + vfst.method()->name() == vmSymbols::loadClass_name())) { + blocking = false; + break; + } } } @@ -2063,7 +2064,7 @@ compilable = ciEnv::MethodCompilable_never; } else { JVMCICompileState compile_state(task, system_dictionary_modification_counter); - JVMCIEnv env(&compile_state, __FILE__, __LINE__); + JVMCIEnv env(thread, &compile_state, __FILE__, __LINE__); methodHandle method(thread, target_handle); env.runtime()->compile_method(&env, jvmci, method, osr_bci);