RFR: 8295976: GetThreadListStackTraces returns wrong state for blocked VirtualThread [v4]

Serguei Spitsyn sspitsyn at openjdk.org
Tue Jun 6 21:37:25 UTC 2023


> The `GetThreadListStackTraces` returns `JVMTI_THREAD_STATE_RUNNABLE` for a VirtualThread blocked on a monitor when called for more than one thread. When called for a single VirtualThread it correctly returns a state that includes the `JVMTI_THREAD_STATE_BLOCKED_ON_MONITOR_ENTER` flag.
> The `VM_GetThreadListStackTraces::doit` should call the `get_threadOop_and_JavaThread` instead of `cv_external_thread_to_JavaThread`. But the `get_threadOop_and_JavaThread` has a check for the current thread by comparing with the JavaThread::current() which does not work for a `VM_op`. Some refactoring of the `get_threadOop_and_JavaThread` was made to make it working for a `VM_op`.
> Also, a minor bug in the `GetSingleStackTraceClosure::do_thread()` was discovered during testing.
> 
> The list of changes is:
> - minor refactoring of the function`get_threadOop_and_JavaThread`: added an overloaded version of this function with the extra parameter `JavaThread* cur_thread`. It is called instead of `JvmtiExport::cv_external_thread_to_JavaThread` from the `VM_GetThreadListStackTraces::doit`.
> - `GetSingleStackTraceClosure::do_thread()`: The use of `jt->threadObj()` is replaced with the `JNIHandles::resolve_external_guard(_jthread)`.
>  - added new test to provide needed coverage: `test/hotspot/jtreg/serviceability/jvmti/vthread/ThreadListStackTracesTest`
>  
> Testing:
>  - ran new test: `test/hotspot/jtreg/serviceability/jvmti/vthread/ThreadListStackTracesTest`
>  - TBD: tiers 1-6 (all are good)

Serguei Spitsyn has updated the pull request incrementally with one additional commit since the last revision:

  addressed new test related review comments

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

Changes:
  - all: https://git.openjdk.org/jdk/pull/14326/files
  - new: https://git.openjdk.org/jdk/pull/14326/files/d20e1221..e982f97e

Webrevs:
 - full: https://webrevs.openjdk.org/?repo=jdk&pr=14326&range=03
 - incr: https://webrevs.openjdk.org/?repo=jdk&pr=14326&range=02-03

  Stats: 6 lines in 2 files changed: 1 ins; 2 del; 3 mod
  Patch: https://git.openjdk.org/jdk/pull/14326.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/14326/head:pull/14326

PR: https://git.openjdk.org/jdk/pull/14326


More information about the hotspot-dev mailing list