RFR: 8299240: rank of JvmtiVTMSTransition_lock can be safepoint

Serguei Spitsyn sspitsyn at openjdk.org
Sat Feb 18 01:36:24 UTC 2023


On Fri, 17 Feb 2023 05:09:25 GMT, David Holmes <dholmes at openjdk.org> wrote:

>> The rank of JvmtiVTMSTransition_lock is better to be safepoint instead of nosafepoint.
>> The fix includes removal of the function `check_vthread_and_suspend_at_safepoint` which is not needed anymore.
>> 
>> Testing:
>> mach5 jobs are in progress:
>>  Kitchensink, tiers1-6 (all JVMTI, JDWP, JDI and JDB tests have to be included)
>
> src/hotspot/share/prims/jvmtiEnv.cpp line 952:
> 
>> 950:     }
>> 951:     // protect thread_oop as a safepoint can be reached in disabler destructor
>> 952:     self_tobj = Handle(current, thread_oop);
> 
> If you move this after line 953 then you can delete line 932 and just have:
> 
> Handle self_tobj = Handle(current, thread_oop);

Thank you for looking at this PR, David!
Please, note a disabler at L938. A safepont can be reached in its destructor.
Also, see the comment at L952:

 937   {
 938     JvmtiVTMSTransitionDisabler disabler(true);
 939     ThreadsListHandle tlh(current);
 940 
 941     err = get_threadOop_and_JavaThread(tlh.list(), thread, &java_thread, &thread_oop);
 942     if (err != JVMTI_ERROR_NONE) {
 943       return err;
 944     }
 945 
 946     // Do not use JvmtiVTMSTransitionDisabler in context of self suspend to avoid deadlocks.
 947     if (java_thread != current) {
 948       err = suspend_thread(thread_oop, java_thread, /* single_suspend */ true, nullptr);
 949       return err;
 950     }
 951     // protect thread_oop as a safepoint can be reached in disabler destructor
 952     self_tobj = Handle(current, thread_oop);
 953   }

-------------

PR: https://git.openjdk.org/jdk/pull/12550


More information about the serviceability-dev mailing list