On Wed, 23 Nov 2022 00:24:28 GMT, Serguei Spitsyn <sspit...@openjdk.org> wrote:
> This problem has two sides. > One is that the `VirtualThread::run() `cashes the field `notifyJvmtiEvents` > value. > It caused the native method `notifyJvmtiUnmountBegin()` not called after the > field `notifyJvmtiEvents` > value has been set to `true` when an agent library is loaded into running VM. > The fix is to get rid of this cashing. > Another is that enabling `notifyJvmtiEvents` notifications needs a > synchronization. > Otherwise, a VTMS transition start can be missed which will cause some > asserts to fire. > The fix is to use a JvmtiVTMSTransitionDisabler helper for sync. > > Testing: > The originally failed tests are passed now: > > runtime/vthread/RedefineClass.java > runtime/vthread/TestObjectAllocationSampleEvent.java > > In progress: > Run the tiers 1-6 to make sure there are no regression. Marked as reviewed by lmesnik (Reviewer). src/java.base/share/classes/java/lang/VirtualThread.java line 273: > 271: private void run(Runnable task) { > 272: assert state == RUNNING; > 273: boolean notifyJvmti = notifyJvmtiEvents; Don't we have same issue in yieldContinuation() method? (line 396) ------------- PR: https://git.openjdk.org/jdk/pull/11304