On Wed, 23 Nov 2022 02:17:43 GMT, Leonid Mesnik <lmes...@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. > > 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) Good point. I'll check and make an update if needed. Thank you for looking at it. ------------- PR: https://git.openjdk.org/jdk/pull/11304