src/share/vm/classfile/classFileParser.cpp

Print this page

        

@@ -3737,10 +3737,11 @@
 
   ClassFileStream* cfs = stream();
   // Timing
   assert(THREAD->is_Java_thread(), "must be a JavaThread");
   JavaThread* jt = (JavaThread*) THREAD;
+  bool cf_changed_in_CFLH = false;
 
   PerfClassTraceTime ctimer(ClassLoader::perf_class_parse_time(),
                             ClassLoader::perf_class_parse_selftime(),
                             NULL,
                             jt->get_thread_stat()->perf_recursion_counts_addr(),

@@ -3776,10 +3777,11 @@
       // JVMTI agent has modified class file data.
       // Set new class file stream using JVMTI agent modified
       // class file data.
       cfs = new ClassFileStream(ptr, end_ptr - ptr, cfs->source());
       set_stream(cfs);
+      cf_changed_in_CFLH = true;
     }
   }
 
   _host_klass = host_klass;
   _cp_patches = cp_patches;

@@ -4219,10 +4221,15 @@
     if (has_default_methods ) {
       DefaultMethods::generate_default_methods(
           this_klass(), &all_mirandas, CHECK_(nullHandle));
     }
 
+    // Add read edges to the unnamed modules of the bootstrap and app class loaders.
+    if (cf_changed_in_CFLH && !class_module.is_null() && module_entry->is_named()) {
+      JvmtiExport::add_default_read_edges(class_module, THREAD);
+    } 
+
     // Update the loader_data graph.
     record_defined_class_dependencies(this_klass, CHECK_NULL);
 
     ClassLoadingService::notify_class_loaded(InstanceKlass::cast(this_klass()),
                                              false /* not shared class */);