8061817: Whitebox.deoptimizeMethod() does not deoptimize all OSR versions of method

Fixed Whitebox.deoptimizeMethod() to deoptimize all OSR versions of the method.

Reviewed-by: kvn, iignatyev
This commit is contained in:
Tobias Hartmann 2014-10-30 13:03:30 +01:00
parent 8aa05f7690
commit fe1762fbd6
5 changed files with 119 additions and 12 deletions

View file

@ -386,19 +386,10 @@ WB_ENTRY(jint, WB_DeoptimizeMethod(JNIEnv* env, jobject o, jobject method, jbool
CHECK_JNI_EXCEPTION_(env, result);
MutexLockerEx mu(Compile_lock);
methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid));
nmethod* code;
if (is_osr) {
int bci = InvocationEntryBci;
while ((code = mh->lookup_osr_nmethod_for(bci, CompLevel_none, false)) != NULL) {
code->mark_for_deoptimization();
++result;
bci = code->osr_entry_bci() + 1;
}
} else {
code = mh->code();
}
if (code != NULL) {
code->mark_for_deoptimization();
result += mh->mark_osr_nmethods();
} else if (mh->code() != NULL) {
mh->code()->mark_for_deoptimization();
++result;
}
result += CodeCache::mark_for_deoptimization(mh());