On Mon, 17 Jun 2024 12:34:25 GMT, David Holmes <dhol...@openjdk.org> wrote:
>> Follow up to https://github.com/openjdk/jdk/pull/19482 that was causing >> issues when the PrintMountedVirtualTest.java was >> running with `JTREG_TEST_THREAD_FACTORY=Virtual` in the loom repo. >> >> - Fixes issues where the test observes the thread during transitions. >> - Fixes a potential issue in the test where CountDownLatch.countDown unparks >> the main (virtual) thread and the main thread observes the dummy thread is >> transition . > > src/hotspot/share/runtime/threads.cpp line 1335: > >> 1333: const oop vt = p->vthread(); >> 1334: if (vt != thread_oop) { >> 1335: assert(vt != nullptr, "vthread should not be null when >> vthread is mounted"); > > I think the assert still belongs in the original position doesn't it? Or > could the problem we hit here cause a transient null to appear as well? I think that, even if based on [this](https://github.com/openjdk/jdk/pull/19482#issuecomment-2166116062) comment from @AlanBateman's in some cases the virtual thread can be mounted but `_vthread` can refer to the carrier thread, what you're saying is correct and in both cases `_vthread` should still not be a null pointer: - Either it's equal to `thread_oop` and we've already checked that it's not `nullptr`. - Or it's different to `thread_oop` and it refers to an actual virtual thread that should not be null. ------------- PR Review Comment: https://git.openjdk.org/jdk/pull/19744#discussion_r1642794256