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 */);