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