oop processOopClass::ActivationAt_prim(smi index, void *FH) { ResourceMark rm; Process* p; frame* last; abstract_vframe* vf = vframe_at(index, FH, p, last); if (!vf) return NULL; oop vfo = new_vframeOop(p, vf)->as_mirror(); if (p == currentProcess) p->killVFrameOopsAndSetWatermark(last); return vfo; }
bool vframeArray::structural_compare(JavaThread* thread, GrowableArray<compiledVFrame*>* chunk) { if (owner_thread() != thread) return false; int index = 0; #if 0 // FIXME can't do this comparison // Compare only within vframe array. for (deoptimizedVFrame* vf = deoptimizedVFrame::cast(vframe_at(first_index())); vf; vf = vf->deoptimized_sender_or_null()) { if (index >= chunk->length() || !vf->structural_compare(chunk->at(index))) return false; index++; } if (index != chunk->length()) return false; #endif return true; }
oop processOopClass::GotoByteCode_prim(smi bci, objVectorOop exprStack, void *FH) { ResourceMark rm; preserved pres1(this); Process* p; frame* last; abstract_vframe* vf = vframe_at(0, FH, p, last); if (!vf) return NULL; if (!p->isRunnable()) { failure(FH, "processes is not runnable"); return 0; } if (p == currentProcess) { failure(FH, "cannot operate on current process"); return 0; } if (p == twainsProcess) { failure(FH, "cannot operate on scheduler process"); return 0; } p->gotoByteCode(vf, bci, exprStack, FH); return pres1.value; }
oop processOopClass::KillUpTo_prim(smi index, void *FH) { ResourceMark rm; preserved pres1(this); Process* p; frame* last; abstract_vframe* vf = vframe_at(index, FH, p, last); if (!vf) return NULL; if (!p->isRunnable()) { failure(FH, "process is not runnable"); return 0; } if (p == currentProcess) { failure(FH, "cannot operate on current process"); return 0; } if (p == twainsProcess) { failure(FH, "cannot operate on scheduler process"); return 0; } p->killFrames(vf); assert(!p->isKilling(), "shouldn't be in killing mode anymore"); return pres1.value; }