> The debuggee main method creates two threads and then starts them:
> 
> 
>     public static void main(String[] args) {
>         System.out.println("Howdy!");
>         Thread t1 = TestScaffold.newThread(new InvokeHangTarg(), name1);
>         Thread t2 = TestScaffold.newThread(new InvokeHangTarg(), name2);
> 
>         t1.start();
>         t2.start();
>     }
> 
> 
> These threads will hit breakpoints which the debugger handles and issues an 
> invoke on the breakpoint thread. The threads run until they generate 100 
> breakpoints. There is an issue when these two threads are virtual threads. 
> Virtual threads are daemon threads. That means the JVM can exit while they 
> are still running. The above main() method is not waiting for these two 
> threads to exit, so main() exits immediately and the JVM starts the shutdown 
> process. It first must wait for all non-daemon threads to exit, but there are 
> none, so the JVM exits right away before the two threads are completed.  The 
> end result of this early exit is that sometimes the invoke done by the 
> debugger never completes because the JVM has already issued a VMDeath event 
> and the debuggee has been disconnected.
> 
> When these two threads are platform threads, the JVM has to wait until they 
> complete before it exits, so they will always complete. The fix for virtual 
> threads is to do a join with t1 and t2. This forces the main() method to 
> block until they have completed.

Chris Plummer has updated the pull request incrementally with three additional 
commits since the last revision:

 - fix spelling error
 - add comment
 - minor formatting fix

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

Changes:
  - all: https://git.openjdk.org/jdk/pull/13068/files
  - new: https://git.openjdk.org/jdk/pull/13068/files/4d28b92e..58ca27b8

Webrevs:
 - full: https://webrevs.openjdk.org/?repo=jdk&pr=13068&range=01
 - incr: https://webrevs.openjdk.org/?repo=jdk&pr=13068&range=00-01

  Stats: 8 lines in 1 file changed: 6 ins; 0 del; 2 mod
  Patch: https://git.openjdk.org/jdk/pull/13068.diff
  Fetch: git fetch https://git.openjdk.org/jdk pull/13068/head:pull/13068

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

Reply via email to