On Tue, 18 Jun 2024 09:31:41 GMT, David Holmes <dhol...@openjdk.org> wrote:
>> @AlanBateman explained to me why that is possible in >> https://github.com/openjdk/jdk/pull/19482#issuecomment-2166116062 and >> https://github.com/openjdk/jdk/pull/19482#issuecomment-2167374446. >> >> Alan can correct me if I'm wrong, but I think that the dummy thread trying >> to unpark the main (virtual) thread needs to run as the carrier to avoid >> nested parking. See: >> https://github.com/openjdk/jdk/blob/412e306d81209c05f55aee7663f7abb80286e361/src/java.base/share/classes/java/lang/VirtualThread.java#L707 > > So IIUC you've changed the test to try to avoid the problem that was causing > the test to fail, as well as changing the code so the test would not fail. > But now we won't/may-not actually test that. ?? I guess I want to see that > the original failing test now passes with the fix. The fix in the threads.cpp code prevents the `Mounted Thread` statement to be printed when the command is incapable of actually printing the Vthread stack because the Vthread is running in the context of the carrier. A vthread running in the context of the carrier can happen when the vthread is undergoing a transition, for example when the vthread unparks another virtual thread. Even with that fix, the original test was invalid because it expected to always see the mounted thread in the ouptut, but waking up the main virtual thread after `started.await()` required that the dummy vthread had to unpark the main vthread, what requires a that dummy unparks main and has to transition to carrier. After the fixed done in `threads.cpp` this would result in the mounted thread not showing up in the output in some cases. To sum up, we needed both changes but the `threads.cpp` change did not make the original test pass. ------------- PR Review Comment: https://git.openjdk.org/jdk/pull/19744#discussion_r1644315802