# HG changeset patch # User Tom Rodriguez # Date 1442594834 25200 # Node ID cf99b5e5b0b4d63d5a1b754ebef76281a070e6c3 # Parent 678f989f3953c4c7ce22c5ff6e0c04176c4a6042 Fix race in initialization of trivial prefixes diff -r 678f989f3953 -r cf99b5e5b0b4 src/share/vm/jvmci/jvmciRuntime.cpp --- a/src/share/vm/jvmci/jvmciRuntime.cpp Fri Sep 18 16:23:13 2015 +0200 +++ b/src/share/vm/jvmci/jvmciRuntime.cpp Fri Sep 18 09:47:14 2015 -0700 @@ -710,8 +710,7 @@ "()Ljdk/internal/jvmci/hotspot/HotSpotJVMCIRuntime;", NULL, CHECK); objArrayOop trivial_prefixes = HotSpotJVMCIRuntime::trivialPrefixes(result); if (trivial_prefixes != NULL) { - _trivial_prefixes_count = trivial_prefixes->length(); - _trivial_prefixes = NEW_C_HEAP_ARRAY(char*, _trivial_prefixes_count, mtCompiler); + char** prefixes = NEW_C_HEAP_ARRAY(char*, trivial_prefixes->length(), mtCompiler); for (int i = 0; i < trivial_prefixes->length(); i++) { oop str = trivial_prefixes->obj_at(i); if (str == NULL) { @@ -720,6 +719,8 @@ _trivial_prefixes[i] = strdup(java_lang_String::as_utf8_string(str)); } } + _trivial_prefixes = prefixes; + _trivial_prefixes_count = trivial_prefixes->length(); } _HotSpotJVMCIRuntime_initialized = true; _HotSpotJVMCIRuntime_instance = JNIHandles::make_global(result()); @@ -958,9 +959,11 @@ } bool JVMCIRuntime::treat_as_trivial(Method* method) { - for (int i = 0; i < _trivial_prefixes_count; i++) { - if (method->method_holder()->name()->starts_with(_trivial_prefixes[i])) { - return true; + if (_HotSpotJVMCIRuntime_initialized) { + for (int i = 0; i < _trivial_prefixes_count; i++) { + if (method->method_holder()->name()->starts_with(_trivial_prefixes[i])) { + return true; + } } } return false;