646
647 void
648 JvmtiVTMSTransitionDisabler::VTMS_unmount_begin(jobject vthread, bool last_unmount) {
649 JavaThread* thread = JavaThread::current();
650
651 assert(!thread->is_in_tmp_VTMS_transition(), "sanity check");
652 assert(!thread->is_in_VTMS_transition(), "sanity check");
653
654 start_VTMS_transition(vthread, /* is_mount */ false);
655 if (!last_unmount) {
656 thread->rebind_to_jvmti_thread_state_of(thread->threadObj());
657 }
658 }
659
660 void
661 JvmtiVTMSTransitionDisabler::VTMS_unmount_end(jobject vthread) {
662 JavaThread* thread = JavaThread::current();
663 assert(thread->is_in_VTMS_transition(), "sanity check");
664 assert(!thread->is_in_tmp_VTMS_transition(), "sanity check");
665 finish_VTMS_transition(vthread, /* is_mount */ false);
666 }
667
668
669 //
670 // Virtual Threads Suspend/Resume management
671 //
672
673 JvmtiVTSuspender::SR_Mode
674 JvmtiVTSuspender::_SR_mode = SR_none;
675
676 VirtualThreadList*
677 JvmtiVTSuspender::_suspended_list = new VirtualThreadList();
678
679 VirtualThreadList*
680 JvmtiVTSuspender::_not_suspended_list = new VirtualThreadList();
681
682 void
683 JvmtiVTSuspender::register_all_vthreads_suspend() {
684 MonitorLocker ml(JvmtiVTMSTransition_lock);
685
|
646
647 void
648 JvmtiVTMSTransitionDisabler::VTMS_unmount_begin(jobject vthread, bool last_unmount) {
649 JavaThread* thread = JavaThread::current();
650
651 assert(!thread->is_in_tmp_VTMS_transition(), "sanity check");
652 assert(!thread->is_in_VTMS_transition(), "sanity check");
653
654 start_VTMS_transition(vthread, /* is_mount */ false);
655 if (!last_unmount) {
656 thread->rebind_to_jvmti_thread_state_of(thread->threadObj());
657 }
658 }
659
660 void
661 JvmtiVTMSTransitionDisabler::VTMS_unmount_end(jobject vthread) {
662 JavaThread* thread = JavaThread::current();
663 assert(thread->is_in_VTMS_transition(), "sanity check");
664 assert(!thread->is_in_tmp_VTMS_transition(), "sanity check");
665 finish_VTMS_transition(vthread, /* is_mount */ false);
666
667 if (thread->pending_jvmti_unmount_event()) {
668 assert(java_lang_VirtualThread::is_preempted(JNIHandles::resolve(vthread)), "should be marked preempted");
669 JvmtiExport::post_vthread_unmount(vthread);
670 thread->set_pending_jvmti_unmount_event(false);
671 }
672 }
673
674
675 //
676 // Virtual Threads Suspend/Resume management
677 //
678
679 JvmtiVTSuspender::SR_Mode
680 JvmtiVTSuspender::_SR_mode = SR_none;
681
682 VirtualThreadList*
683 JvmtiVTSuspender::_suspended_list = new VirtualThreadList();
684
685 VirtualThreadList*
686 JvmtiVTSuspender::_not_suspended_list = new VirtualThreadList();
687
688 void
689 JvmtiVTSuspender::register_all_vthreads_suspend() {
690 MonitorLocker ml(JvmtiVTMSTransition_lock);
691
|