On Wed, 13 Jul 2022 13:20:45 GMT, Zhengyu Gu <z...@openjdk.org> wrote:

>> Ok. Everything is passing after your latest fix.
>> 
>> I think the test still has a synchronization bug, but probably not something 
>> important enough to worry about, and I'm guessing a lot of tests have this 
>> issue. The test disables events and then frees the raw monitor used in the 
>> callback. The problem is that JVMTI might already be in the process of 
>> calling the callback, so the callback will still attempt to use the monitor. 
>> The test shutdown code and the test callback code need to be synchronized to 
>> avoid this issue. However, there is a chicken and egg problem here, because 
>> you need a raw monitor for the synchronization. I think the real solution is 
>> to just not bother freeing up the raw monitor. I think we may have done this 
>> recently in some other test. Perhaps @sspitsyn remembers.
>
>> Ok. Everything is passing after your latest fix.
>> 
>> I think the test still has a synchronization bug, but probably not something 
>> important enough to worry about, and I'm guessing a lot of tests have this 
>> issue. The test disables events and then frees the raw monitor used in the 
>> callback. The problem is that JVMTI might already be in the process of 
>> calling the callback, so the callback will still attempt to use the monitor. 
>> The test shutdown code and the test callback code need to be synchronized to 
>> avoid this issue. However, there is a chicken and egg problem here, because 
>> you need a raw monitor for the synchronization. I think the real solution is 
>> to just not bother freeing up the raw monitor. I think we may have done this 
>> recently in some other test. Perhaps @sspitsyn remembers.
> 
> Me too have a concern on synchronization for enabling/disabling a JVMTI event:
> While setting event bits is synchronized with `JvmtiThreadState_lock` in 
> [JvmtiEventControllerPrivate::set_user_enabled()](https://github.com/openjdk/jdk/blob/master/src/hotspot/share/prims/jvmtiEventController.cpp#L889),
>  but reading 
> [`is_enabled()](https://github.com/openjdk/jdk/blob/master/src/hotspot/share/prims/jvmtiEnvBase.hpp#L308)
>  is unsynchronized. 
> 
> I don't know how it supposes to work, but at least 
> [`_enabled_bits`](https://github.com/openjdk/jdk/blob/master/src/hotspot/share/prims/jvmtiEventController.hpp#L85)
>  should be an `volatile`?

@zhengyu123 I'll be OOO until tuesday, so after this evening I won't be able to 
respond. @sspitsyn will look at the JVMTI changes again and also help with some 
of your synchronization questions.

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

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

Reply via email to