8350649: Class unloading accesses/resurrects dead Java mirror after JDK-8346567

Reviewed-by: coleenp, egahlin
This commit is contained in:
Aleksey Shipilev 2025-02-26 16:41:16 +00:00
parent 9477c705c0
commit ec6624b54e
2 changed files with 7 additions and 2 deletions

View File

@ -347,7 +347,7 @@ static void do_write_klass(JfrCheckpointWriter* writer, CldPtr cld, KlassPtr kla
writer->write(cld != nullptr ? cld_id(cld, leakp) : 0);
writer->write(mark_symbol(klass, leakp));
writer->write(package_id(klass, leakp));
writer->write(klass->modifier_flags());
writer->write(klass->compute_modifier_flags());
writer->write<bool>(klass->is_hidden());
if (leakp) {
assert(IS_LEAKP(klass), "invariant");

View File

@ -749,9 +749,14 @@ public:
virtual void release_C_heap_structures(bool release_constant_pool = true);
public:
virtual u2 compute_modifier_flags() const = 0;
// Get modifier flags from Java mirror cache.
int modifier_flags() const;
// Compute modifier flags from the original data. This also allows
// accessing flags when Java mirror is already dead, e.g. during class
// unloading.
virtual u2 compute_modifier_flags() const = 0;
// JVMTI support
virtual jint jvmti_class_status() const;