8245877: assert(_value != __null) failed: resolving NULL _value in JvmtiExport::post_compiled_method_load

Reviewed-by: sspitsyn, dholmes, coleenp
This commit is contained in:
Leonid Mesnik 2021-06-30 02:05:25 +00:00
parent ee526a2ea8
commit b969136b9f
4 changed files with 6 additions and 4 deletions
src/hotspot/share
test/hotspot/jtreg

@ -1608,6 +1608,8 @@ void nmethod::post_compiled_method_load_event(JvmtiThreadState* state) {
if (is_not_entrant() && can_convert_to_zombie()) {
return;
}
// Ensure the sweeper can't collect this nmethod until it become "active" with JvmtiThreadState::nmethods_do.
mark_as_seen_on_stack();
}
// This is a bad time for a safepoint. We don't want

@ -2206,6 +2206,7 @@ void JvmtiExport::post_compiled_method_load(JvmtiEnv* env, nmethod *nm) {
ResourceMark rm(thread);
HandleMark hm(thread);
assert(!nm->is_zombie(), "nmethod zombie in post_compiled_method_load");
// Add inlining information
jvmtiCompiledMethodLoadInlineRecord* inlinerecord = create_inline_record(nm);
// Pass inlining information through the void pointer

@ -962,10 +962,10 @@ JvmtiDeferredEvent JvmtiDeferredEventQueue::dequeue() {
}
void JvmtiDeferredEventQueue::post(JvmtiEnv* env) {
// Post and destroy queue nodes
// Post events while nmethods are still in the queue and can't be unloaded or made zombie
while (_queue_head != NULL) {
JvmtiDeferredEvent event = dequeue();
event.post_compiled_method_load_event(env);
_queue_head->event().post_compiled_method_load_event(env);
dequeue();
}
}

@ -111,7 +111,6 @@ serviceability/jvmti/HeapMonitor/MyPackage/HeapMonitorStatIntervalTest.java 8214
serviceability/jvmti/HeapMonitor/MyPackage/HeapMonitorStatArrayCorrectnessTest.java 8224150 generic-all
serviceability/jvmti/ModuleAwareAgents/ThreadStart/MAAThreadStart.java 8225354 windows-all
serviceability/dcmd/gc/RunFinalizationTest.java 8227120 linux-all,windows-x64
serviceability/jvmti/CompiledMethodLoad/Zombie.java 8245877 linux-aarch64
#############################################################################