< prev index next >

src/hotspot/share/jvmci/jvmciCompilerToVM.cpp

Print this page
*** 47,10 ***
--- 47,11 ---
  #include "oops/constantPool.inline.hpp"
  #include "oops/instanceKlass.inline.hpp"
  #include "oops/instanceMirrorKlass.hpp"
  #include "oops/method.inline.hpp"
  #include "oops/objArrayKlass.inline.hpp"
+ #include "oops/trainingData.hpp"
  #include "oops/typeArrayOop.inline.hpp"
  #include "prims/jvmtiExport.hpp"
  #include "prims/methodHandles.hpp"
  #include "prims/nativeLookup.hpp"
  #include "runtime/arguments.hpp"

*** 503,15 ***
          }
          goto unexpected;
        }
      } else if (JVMCIENV->isa_HotSpotMethodData(base_object)) {
        jlong base_address = (intptr_t) JVMCIENV->asMethodData(base_object);
!       klass = *((Klass**) (intptr_t) (base_address + offset));
!       if (klass == nullptr || !klass->is_loader_alive()) {
          // Klasses in methodData might be concurrently unloading so return null in that case.
          return nullptr;
        }
      } else {
        goto unexpected;
      }
    } else {
      goto unexpected;
--- 504,19 ---
          }
          goto unexpected;
        }
      } else if (JVMCIENV->isa_HotSpotMethodData(base_object)) {
        jlong base_address = (intptr_t) JVMCIENV->asMethodData(base_object);
!       Klass* k = *((Klass**) (intptr_t) (base_address + offset));
!       if (k == nullptr || k->class_loader_data() == nullptr || !TrainingData::is_klass_loaded(k)) {
+         return nullptr;
+       }
+       if (!k->is_loader_alive()) {
          // Klasses in methodData might be concurrently unloading so return null in that case.
          return nullptr;
        }
+       klass = k;
      } else {
        goto unexpected;
      }
    } else {
      goto unexpected;
< prev index next >