8056154: JVM crash with EXCEPTION_ACCESS_VIOLATION when there are many threads running
Don't make compiled MH intrinsics not entrant when redefining classes Reviewed-by: kvn, vlivanov
This commit is contained in:
parent
5db7b3a4e1
commit
e285f3eadc
@ -2290,6 +2290,9 @@ methodHandle SystemDictionary::find_method_handle_intrinsic(vmIntrinsics::ID iid
|
|||||||
}
|
}
|
||||||
|
|
||||||
assert(spe != NULL && spe->method() != NULL, "");
|
assert(spe != NULL && spe->method() != NULL, "");
|
||||||
|
assert(!UseCompiler || (spe->method()->has_compiled_code() &&
|
||||||
|
spe->method()->code()->entry_point() == spe->method()->from_compiled_entry()),
|
||||||
|
"MH intrinsic invariant");
|
||||||
return spe->method();
|
return spe->method();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -687,7 +687,9 @@ int CodeCache::mark_for_evol_deoptimization(instanceKlassHandle dependee) {
|
|||||||
void CodeCache::mark_all_nmethods_for_deoptimization() {
|
void CodeCache::mark_all_nmethods_for_deoptimization() {
|
||||||
MutexLockerEx mu(CodeCache_lock, Mutex::_no_safepoint_check_flag);
|
MutexLockerEx mu(CodeCache_lock, Mutex::_no_safepoint_check_flag);
|
||||||
FOR_ALL_ALIVE_NMETHODS(nm) {
|
FOR_ALL_ALIVE_NMETHODS(nm) {
|
||||||
nm->mark_for_deoptimization();
|
if (!nm->method()->is_method_handle_intrinsic()) {
|
||||||
|
nm->mark_for_deoptimization();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -595,6 +595,7 @@ void CompiledStaticCall::compute_entry(methodHandle m, StaticCallInfo& info) {
|
|||||||
} else {
|
} else {
|
||||||
// Callee is interpreted code. In any case entering the interpreter
|
// Callee is interpreted code. In any case entering the interpreter
|
||||||
// puts a converter-frame on the stack to save arguments.
|
// puts a converter-frame on the stack to save arguments.
|
||||||
|
assert(!m->is_method_handle_intrinsic(), "Compiled code should never call interpreter MH intrinsics");
|
||||||
info._to_interpreter = true;
|
info._to_interpreter = true;
|
||||||
info._entry = m()->get_c2i_entry();
|
info._entry = m()->get_c2i_entry();
|
||||||
}
|
}
|
||||||
|
@ -448,7 +448,10 @@ class nmethod : public CodeBlob {
|
|||||||
// alive. It is used when an uncommon trap happens. Returns true
|
// alive. It is used when an uncommon trap happens. Returns true
|
||||||
// if this thread changed the state of the nmethod or false if
|
// if this thread changed the state of the nmethod or false if
|
||||||
// another thread performed the transition.
|
// another thread performed the transition.
|
||||||
bool make_not_entrant() { return make_not_entrant_or_zombie(not_entrant); }
|
bool make_not_entrant() {
|
||||||
|
assert(!method()->is_method_handle_intrinsic(), "Cannot make MH intrinsic not entrant");
|
||||||
|
return make_not_entrant_or_zombie(not_entrant);
|
||||||
|
}
|
||||||
bool make_zombie() { return make_not_entrant_or_zombie(zombie); }
|
bool make_zombie() { return make_not_entrant_or_zombie(zombie); }
|
||||||
|
|
||||||
// used by jvmti to track if the unload event has been reported
|
// used by jvmti to track if the unload event has been reported
|
||||||
|
Loading…
x
Reference in New Issue
Block a user