> 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: review: remove unused imports from ThreadListStackTracesTest.java ------------- Changes: - all: https://git.openjdk.org/jdk/pull/14326/files - new: https://git.openjdk.org/jdk/pull/14326/files/6b685ca3..7506b539 Webrevs: - full: https://webrevs.openjdk.org/?repo=jdk&pr=14326&range=05 - incr: https://webrevs.openjdk.org/?repo=jdk&pr=14326&range=04-05 Stats: 5 lines in 1 file changed: 0 ins; 5 del; 0 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