According to Da Feng, an infinite loop can occur during on-stack-replacement. Quote from MRP-102:
OK, find the bug! If the target of OSR has a yield point immediately after the jmp instruction, the RVMThread yield point will call OSRListener.checkForOSRPromotion to check for OSR. Since the Baseline compiled method didn't have methodId changed, the methodId on stack obtained through fp will be the old Baseline compiled one. This will cause a dead loop. So I just add a clearOutdate method to CompiledMethod, and clear the outdate bit of flag in OnStackReplacementPlan
All