equal
deleted
inserted
replaced
1462 // (see call_VM_base() in assembler_<cpu>.cpp). |
1462 // (see call_VM_base() in assembler_<cpu>.cpp). |
1463 |
1463 |
1464 // It's fine to update the thread state here because no JVMTI events |
1464 // It's fine to update the thread state here because no JVMTI events |
1465 // shall be posted for this PopFrame. |
1465 // shall be posted for this PopFrame. |
1466 |
1466 |
1467 state->update_for_pop_top_frame(); |
1467 // It is only safe to perform the direct operation on the current |
|
1468 // thread. All other usage needs to use a vm-safepoint-op for safety. |
|
1469 if (java_thread == JavaThread::current()) { |
|
1470 state->update_for_pop_top_frame(); |
|
1471 } else { |
|
1472 VM_UpdateForPopTopFrame op(state); |
|
1473 VMThread::execute(&op); |
|
1474 jvmtiError err = op.result(); |
|
1475 if (err != JVMTI_ERROR_NONE) { |
|
1476 return err; |
|
1477 } |
|
1478 } |
|
1479 |
1468 java_thread->set_popframe_condition(JavaThread::popframe_pending_bit); |
1480 java_thread->set_popframe_condition(JavaThread::popframe_pending_bit); |
1469 // Set pending step flag for this popframe and it is cleared when next |
1481 // Set pending step flag for this popframe and it is cleared when next |
1470 // step event is posted. |
1482 // step event is posted. |
1471 state->set_pending_step_for_popframe(); |
1483 state->set_pending_step_for_popframe(); |
1472 } |
1484 } |
1503 // java_thread - pre-checked |
1515 // java_thread - pre-checked |
1504 // java_thread - unchecked |
1516 // java_thread - unchecked |
1505 // depth - pre-checked as non-negative |
1517 // depth - pre-checked as non-negative |
1506 jvmtiError |
1518 jvmtiError |
1507 JvmtiEnv::NotifyFramePop(JavaThread* java_thread, jint depth) { |
1519 JvmtiEnv::NotifyFramePop(JavaThread* java_thread, jint depth) { |
|
1520 jvmtiError err = JVMTI_ERROR_NONE; |
1508 ResourceMark rm; |
1521 ResourceMark rm; |
1509 uint32_t debug_bits = 0; |
1522 uint32_t debug_bits = 0; |
1510 |
1523 |
1511 JvmtiThreadState *state = JvmtiThreadState::state_for(java_thread); |
1524 JvmtiThreadState *state = JvmtiThreadState::state_for(java_thread); |
1512 if (state == NULL) { |
1525 if (state == NULL) { |
1530 return JVMTI_ERROR_OPAQUE_FRAME; |
1543 return JVMTI_ERROR_OPAQUE_FRAME; |
1531 } |
1544 } |
1532 |
1545 |
1533 assert(vf->frame_pointer() != NULL, "frame pointer mustn't be NULL"); |
1546 assert(vf->frame_pointer() != NULL, "frame pointer mustn't be NULL"); |
1534 |
1547 |
1535 int frame_number = state->count_frames() - depth; |
1548 // It is only safe to perform the direct operation on the current |
1536 state->env_thread_state(this)->set_frame_pop(frame_number); |
1549 // thread. All other usage needs to use a vm-safepoint-op for safety. |
1537 |
1550 if (java_thread == JavaThread::current()) { |
1538 return JVMTI_ERROR_NONE; |
1551 int frame_number = state->count_frames() - depth; |
|
1552 state->env_thread_state(this)->set_frame_pop(frame_number); |
|
1553 } else { |
|
1554 VM_SetFramePop op(this, state, depth); |
|
1555 VMThread::execute(&op); |
|
1556 err = op.result(); |
|
1557 } |
|
1558 return err; |
1539 } /* end NotifyFramePop */ |
1559 } /* end NotifyFramePop */ |
1540 |
1560 |
1541 |
1561 |
1542 // |
1562 // |
1543 // Force Early Return functions |
1563 // Force Early Return functions |