On Wed, 13 Jul 2022 01:14:48 GMT, Chris Plummer <cjplum...@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.

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`?

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

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

Reply via email to