8316711: SEGV in LoaderConstraintTable::find_loader_constraint after JDK-8310874

Reviewed-by: dcubed, iklam
This commit is contained in:
Coleen Phillimore 2023-09-22 21:58:01 +00:00
parent e015e6ce28
commit 68a9c81040
2 changed files with 3 additions and 4 deletions

View File

@ -448,6 +448,7 @@ InstanceKlass* LoaderConstraintTable::find_constrained_klass(Symbol* name,
void LoaderConstraintTable::remove_failed_loaded_klass(InstanceKlass* klass,
ClassLoaderData* loader) {
MutexLocker ml(SystemDictionary_lock);
Symbol* name = klass->name();
LoaderConstraint *p = find_loader_constraint(name, loader);
if (p != nullptr && p->klass() != nullptr && p->klass() == klass) {

View File

@ -1524,12 +1524,10 @@ InstanceKlass* SystemDictionary::find_or_define_instance_class(Symbol* class_nam
assert(defined_k != nullptr, "Should have a klass if there's no exception");
k->class_loader_data()->add_to_deallocate_list(k);
} else if (HAS_PENDING_EXCEPTION) {
// Remove this InstanceKlass from the LoaderConstraintTable if added.
LoaderConstraintTable::remove_failed_loaded_klass(k, class_loader_data(class_loader));
assert(defined_k == nullptr, "Should not have a klass if there's an exception");
k->class_loader_data()->add_to_deallocate_list(k);
// Also remove this InstanceKlass from the LoaderConstraintTable if added.
MutexLocker ml(SystemDictionary_lock);
LoaderConstraintTable::remove_failed_loaded_klass(k, class_loader_data(class_loader));
}
return defined_k;
}