Currently kill001 assumes that JVMTI StopThread (via JDI ThreadReference.stop) 
is not supported for virtual threads. 
[JDK-8306034](https://bugs.openjdk.org/browse/JDK-8306034) is adding support 
for StopThread on a virtual thread as long as it is suspended and mounted. This 
means, for example, it will work for virtual threads in the following 
conditions:
 - Debuggee in a loop and suspended
 - Debuggee at a breakpoint and suspended

But will continue to not work in the following situations:
- Debuggee in a loop but not suspended
- Debuggee suspended but unmounted, such as during a call the Thread.sleep()

kill001 suspends all threads at a breakpoint and then does a "jdb kill" on each 
thread, which translate to `ThreadReference.stop()`, so this is expected to 
work now.

Most of the changes involve undoing the virtual thread specific code that was 
added to the test as part of 
[JDK-8282385](https://bugs.openjdk.org/browse/JDK-8282385). However, there is 
an additional issue that also needs fixing. The test relies on the fact that 
the async exception is normally not caught, and that jdb normally stops when an 
uncaught exception is thrown. With virtual threads there ends up being an 
exception handler in `java.lang.VirtualThread.run()`, resulting in jdb not 
stopping when the async exception is thrown. This is fixed by having the test 
issue a jdb "catch all <classname>" command for each async exception type that 
the test throws.

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

Commit messages:
 - Fix issues when run in virtual thread mode.

Changes: https://git.openjdk.org/jdk/pull/13967/files
 Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=13967&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8306467
  Stats: 72 lines in 3 files changed: 26 ins; 24 del; 22 mod
  Patch: https://git.openjdk.org/jdk/pull/13967.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/13967/head:pull/13967

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

Reply via email to