changeset 22586:cf99b5e5b0b4

Fix race in initialization of trivial prefixes
author Tom Rodriguez <tom.rodriguez@oracle.com>
date Fri, 18 Sep 2015 09:47:14 -0700
parents 678f989f3953
children c016f4fc2bd7
files src/share/vm/jvmci/jvmciRuntime.cpp
diffstat 1 files changed, 8 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- 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;