RFR: JDK-8310584: GetThreadState reports blocked and runnable for pinned suspended virtual threads

Alex Menkov amenkov at openjdk.org
Mon Jul 17 22:33:04 UTC 2023


On Thu, 13 Jul 2023 19:18:38 GMT, Alex Menkov <amenkov at openjdk.org> wrote:

> The change fixes handling of "suspended" bit in VT state.
> The code looks very strange.
> java_lang_VirtualThread::RUNNING == 3, so line 803 clears JVMTI_THREAD_STATE_ALIVE(1) and JVMTI_THREAD_STATE_TERMINATED(2)
> Per log this code came from loom repo with VT integration.
> 
> Testing: tier1-4, updated GetThreadStateMountedTest.java

So AFAIU GetThreadState for platform threads (get_thread_state_base) don't have similar issue because suspended/interrupted values are read after reading main thread state value.
For virtual threads suspended/interrupted values are read before. There is a comment in the line 796: `// This call can trigger a safepoint, so thread_oop must not be used after it.` I suppose this is the reason to read them earlier.
Then I think we need to ensure the thread is still alive before applying suspended/interrupted bits

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

PR Comment: https://git.openjdk.org/jdk/pull/14878#issuecomment-1638975987


More information about the serviceability-dev mailing list