changeset 22464:3fb432661d59

make JVMCIRuntime::metadata_do return immediately if HotSpotJVMCIMetaAccessContext has not yet been loaded
author Doug Simon <doug.simon@oracle.com>
date Tue, 25 Aug 2015 13:56:32 +0200
parents d9f5c93a83d3
children b14500c9da22
files src/share/vm/jvmci/jvmciJavaAccess.hpp src/share/vm/jvmci/jvmciRuntime.cpp
diffstat 2 files changed, 7 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/src/share/vm/jvmci/jvmciJavaAccess.hpp	Mon Aug 24 19:17:08 2015 -0700
+++ b/src/share/vm/jvmci/jvmciJavaAccess.hpp	Tue Aug 25 13:56:32 2015 +0200
@@ -304,15 +304,17 @@
 #define STATIC_OOPISH_FIELD(klassName, name, type, signature)                                                  \
     static int _##name##_offset;                                                                               \
     static type name() {                                                                                       \
+      assert(klassName::klass() != NULL, "Class not yet loaded: " #klassName);                                 \
       InstanceKlass* ik = InstanceKlass::cast(klassName::klass());                                             \
       address addr = ik->static_field_addr(_##name##_offset - InstanceMirrorKlass::offset_of_static_fields()); \
       if (UseCompressedOops) {                                                                                 \
-        return (type) oopDesc::load_decode_heap_oop((narrowOop *)addr);  \
+        return (type) oopDesc::load_decode_heap_oop((narrowOop *)addr);                                        \
       } else {                                                                                                 \
-        return (type) oopDesc::load_decode_heap_oop((oop*)addr);         \
+        return (type) oopDesc::load_decode_heap_oop((oop*)addr);                                               \
       }                                                                                                        \
     }                                                                                                          \
     static void set_##name(type x) {                                                                           \
+      assert(klassName::klass() != NULL, "Class not yet loaded: " #klassName);                                 \
       InstanceKlass* ik = InstanceKlass::cast(klassName::klass());                                             \
       address addr = ik->static_field_addr(_##name##_offset - InstanceMirrorKlass::offset_of_static_fields()); \
       if (UseCompressedOops) {                                                                                 \
--- a/src/share/vm/jvmci/jvmciRuntime.cpp	Mon Aug 24 19:17:08 2015 -0700
+++ b/src/share/vm/jvmci/jvmciRuntime.cpp	Tue Aug 25 13:56:32 2015 +0200
@@ -710,6 +710,9 @@
 }
 
 void JVMCIRuntime::metadata_do(void f(Metadata*)) {
+  if (HotSpotJVMCIMetaAccessContext::klass() == NULL) {
+    return;
+  }
   // WeakReference<HotSpotJVMCIMetaAccessContext>[]
   objArrayOop allContexts = HotSpotJVMCIMetaAccessContext::allContexts();
   if (allContexts == NULL) {