8293584: CodeCache::old_nmethods_do incorrectly filters is_unloading nmethods

Reviewed-by: eosterlund, kvn
This commit is contained in:
Coleen Phillimore 2022-11-21 13:46:09 +00:00
parent 16ab754e49
commit 08008139cc

View File

@ -1306,13 +1306,12 @@ void CodeCache::old_nmethods_do(MetadataClosure* f) {
if (old_compiled_method_table != NULL) {
length = old_compiled_method_table->length();
for (int i = 0; i < length; i++) {
CompiledMethod* cm = old_compiled_method_table->at(i);
// Only walk !is_unloading nmethods, the other ones will get removed by the GC.
if (!cm->is_unloading()) {
// Walk all methods saved on the last pass. Concurrent class unloading may
// also be looking at this method's metadata, so don't delete it yet if
// it is marked as unloaded.
old_compiled_method_table->at(i)->metadata_do(f);
}
}
}
log_debug(redefine, class, nmethod)("Walked %d nmethods for mark_on_stack", length);
}