On Thu, 16 Nov 2023 17:22:35 GMT, Serguei Spitsyn <sspit...@openjdk.org> wrote:
>> Thanks! This is a valid concern. Will try to fix this. > > I'm suggesting to fix it this way for the unmounted case only: > > @@ -1976,6 +1976,13 @@ JvmtiHandshake::execute(JvmtiUnitedHandshakeClosure* > hs_cl, ThreadsListHandle* t > return; > } > if (target_jt == nullptr) { // unmounted virtual thread > + // JvmtiVTMSTransitionDisabler can start after the vthread executed > notifyJvmtiUnmount(), i.e. > + // the vthread is already outside the transition, but before changing > the state to TERMINATED. > + // Changing the state to TERMINATED is racy, so we check if the > continuation is done in advance. > + oop cont = java_lang_VirtualThread::continuation(target_h()); > + if (jdk_internal_vm_Continuation::done(cont)) { > + return; > + } > hs_cl->do_vthread(target_h); // execute handshake closure callback on > current thread directly > } > } Sounds good. Is there a reason why not have the check inside JvmtiEnvBase::is_vthread_alive()? ------------- PR Review Comment: https://git.openjdk.org/jdk/pull/16460#discussion_r1396202630