On Sat, 18 Feb 2023 01:30:27 GMT, Serguei Spitsyn <sspit...@openjdk.org> wrote:

>> 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   }

> it means there are now many places that can block for safepoints that 
> previously wouldn't and it is very to hard to tell if that is okay or not.

We partially rely on testing and good test coverage here.

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

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

Reply via email to