On Thu, 30 Mar 2023 16:33:01 GMT, Serguei Spitsyn <sspit...@openjdk.org> wrote:

>> I've just pushed my update with refactoring of these corrections in 
>> `VM_SetNotifyJvmtiEventsMode` after discussion of this code with Leonid. I 
>> hope it resolved at least part of your concerns.
>> This kind of problem exists only when we disable+enable notifyJvmti events 
>> multiple times for testing purposes.
>> This code with corrections of jt->jvmti_thread_state() is not needed when we 
>> enable notifyJvmti events just once.
>> Your are correct that the ability to disable notifyJvmti events is 
>> implemented with using WhiteBox API.
>> My last update has a comment explaining this.
>> 
>>> In that case can we only execute this restore code when using the WhiteBox 
>>> API?
>> 
>> This is a good suggestion which we already discussed privately with Leonid.
>> I've got an idea how to implement this check.
>
>> Also not sure if applying this restore in all cases will be correct, since 
>> we might be somewhere at a transition. For example, a thread could have 
>> blocked right in the return from notifyJvmtiUnmount() in 
>> yieldContinuation(). It will looked like virtual because unmount() was not 
>> executed yet, and the jvmti_thread_state should be that of the platform 
>> thread because we never changed it when mounting. We should leave the state 
>> as is but in here we would change it to the virtual thread's jvmti state. 
>> The only case I think it makes sense to do this restore steps when enabling 
>> the flag is for those threads that are outside a transition with a mounted 
>> virtual thread, since we want to adjust the jvmti_thread_state so that it 
>> looks right on the next unmount.
> 
> Agreed, thanks. In fact, I've already experimented with it.
> As you noted, this correction is wrong for unmount transition. Also, we don't 
> need to correct it for mount transition because it will be corrected by the 
> `JvmtiVTMSTransitionDisabler::VTMS_mount_end()` as it makes a call 
> `thread->rebind_to_jvmti_thread_state_of(vt)`.
> The only thing that bothers me here is that we fight non-real problems as 
> this code is needed only to support artificial disabling for testing purposes 
> to be able to repeat enable again. :-)

The fix to only restore the state outside a transition looks good.
Yes, the added testing methods are making this harder :)

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

PR Review Comment: https://git.openjdk.org/jdk/pull/13133#discussion_r1153670911

Reply via email to