On Sat, 18 Mar 2023 00:22:54 GMT, Chris Plummer <cjplum...@openjdk.org> wrote:

>> 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

Thumbs up. Thanks for adding the comment.
One possible nit typo...

test/jdk/com/sun/jdi/InvokeHangTest.java line 65:

> 63:         try {
> 64:             // The join ensures that the test completes before we exit 
> main(). If we are using
> 65:             // virtual threads, they are always daemon threads, and 
> therefor the JVM will exit

nit typo: s/therefor/therefore/

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

Marked as reviewed by dcubed (Reviewer).

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

Reply via email to