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