src/hotspot/share/memory/metaspaceShared.cpp
changeset 50206 adec398d9051
parent 50056 ca1f2d4d4ec8
child 50445 bd6b78feb6a3
--- a/src/hotspot/share/memory/metaspaceShared.cpp	Mon May 21 18:44:09 2018 -0700
+++ b/src/hotspot/share/memory/metaspaceShared.cpp	Mon May 21 21:27:12 2018 -0700
@@ -1411,6 +1411,9 @@
   // Move classes from platform/system dictionaries into the boot dictionary
   SystemDictionary::combine_shared_dictionaries();
 
+  // Make sure all classes have a correct loader type.
+  ClassLoaderData::the_null_class_loader_data()->dictionary()->classes_do(MetaspaceShared::check_shared_class_loader_type);
+
   // Remove all references outside the metadata
   tty->print("Removing unshareable information ... ");
   remove_unshareable_in_classes();
@@ -1610,13 +1613,14 @@
   }
 };
 
-void MetaspaceShared::check_shared_class_loader_type(Klass* k) {
-  if (k->is_instance_klass()) {
-    InstanceKlass* ik = InstanceKlass::cast(k);
-    u2 loader_type = ik->loader_type();
-    ResourceMark rm;
-    guarantee(loader_type != 0,
-              "Class loader type is not set for this class %s", ik->name()->as_C_string());
+void MetaspaceShared::check_shared_class_loader_type(InstanceKlass* ik) {
+  ResourceMark rm;
+  if (ik->shared_classpath_index() == UNREGISTERED_INDEX) {
+    guarantee(ik->loader_type() == 0,
+            "Class loader type must not be set for this class %s", ik->name()->as_C_string());
+  } else {
+    guarantee(ik->loader_type() != 0,
+            "Class loader type must be set for this class %s", ik->name()->as_C_string());
   }
 }