8215491: ICStubInterface::finalize finds zombie nmethod with ZGC concurrent class unloading

Reviewed-by: dlong, coleenp
This commit is contained in:
Erik Österlund 2018-12-20 10:41:45 +01:00
parent 1cc5cf4c02
commit 83adde9866
2 changed files with 7 additions and 6 deletions
src/hotspot/share

@ -1283,6 +1283,13 @@ bool nmethod::make_not_entrant_or_zombie(int state) {
flush_dependencies(/*delete_immediately*/true);
}
// Clear ICStubs to prevent back patching stubs of zombie or flushed
// nmethods during the next safepoint (see ICStub::finalize).
{
CompiledICLocker ml(this);
clear_ic_stubs();
}
// zombie only - if a JVMTI agent has enabled the CompiledMethodUnload
// event and it hasn't already been reported for this nmethod then
// report it now. The event may have been reported earlier if the GC

@ -717,12 +717,6 @@ NMethodSweeper::MethodStateChange NMethodSweeper::process_compiled_method(Compil
// stack we can safely convert it to a zombie method
OrderAccess::loadload(); // _stack_traversal_mark and _state
if (cm->can_convert_to_zombie()) {
// Clear ICStubs to prevent back patching stubs of zombie or flushed
// nmethods during the next safepoint (see ICStub::finalize).
{
CompiledICLocker ml(cm);
cm->clear_ic_stubs();
}
// Code cache state change is tracked in make_zombie()
cm->make_zombie();
SWEEP(cm);