HANDLE_OPCODE(OP_MONITOR_EXIT /*vAA*/) { Object* obj; EXPORT_PC(); vsrc1 = INST_AA(inst); ILOGV("|monitor-exit v%d %s(0x%08x)", vsrc1, kSpacing+5, GET_REGISTER(vsrc1)); obj = (Object*)GET_REGISTER(vsrc1); if (!checkForNull(obj)) { /* * The exception needs to be processed at the *following* * instruction, not the current instruction (see the Dalvik * spec). Because we're jumping to an exception handler, * we're not actually at risk of skipping an instruction * by doing so. */ ADJUST_PC(1); /* monitor-exit width is 1 */ GOTO_exceptionThrown(); } ILOGV("+ unlocking %p %s\n", obj, obj->clazz->descriptor); if (!dvmUnlockObject(self, obj)) { assert(dvmCheckException(self)); ADJUST_PC(1); GOTO_exceptionThrown(); } } FINISH(1); OP_END