RFR: JDK-8068225: nsk/jdi/EventQueue/remove_l/remove_l005 intermittently times out

Gary Adams gary.adams at oracle.com
Wed Feb 6 19:02:51 UTC 2019


Yes, the test was hung in waitFor.

The debugger process made some calls after the VMStart event
was observed, but never resumed the debuggee.

Here's a simple change that makes test run to completion cleanly.


diff --git 
a/test/hotspot/jtreg/vmTestbase/nsk/jdi/VirtualMachine/canBeModified/canbemodified001.java 
b/test/hotspot/jtreg/vmTestbase/nsk/jdi/VirtualMachine/canBeModified/canbemodified001.java
--- 
a/test/hotspot/jtreg/vmTestbase/nsk/jdi/VirtualMachine/canBeModified/canbemodified001.java
+++ 
b/test/hotspot/jtreg/vmTestbase/nsk/jdi/VirtualMachine/canBeModified/canbemodified001.java
@@ -1,5 +1,5 @@
  /*
- * Copyright (c) 2003, 2018, Oracle and/or its affiliates. All rights 
reserved.
+ * Copyright (c) 2003, 2019, Oracle and/or its affiliates. All rights 
reserved.
   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   *
   * This code is free software; you can redistribute it and/or modify it
@@ -78,6 +78,7 @@
              exitStatus = Consts.TEST_FAILED;
              e.printStackTrace();
          } finally {
+            debugee.resume();
              debugee.endDebugee();
          }
          display("Test finished. exitStatus = " + exitStatus);

On 2/6/19, 1:16 PM, Chris Plummer wrote:
> Does it timeout in waitFor()?
>
> Chris
>
> On 2/6/19 10:01 AM, Gary Adams wrote:
>> So far the only test that has an issue with the change in waitFor 
>> order is
>> nsk/jdi/VirtualMachine/canBeModified, which does not appear to 
>> synchronize
>> with the debuggee.
>>
>> On 2/6/19, 12:15 PM, Chris Plummer wrote:
>>> What happens if endDebugee() is called when the caller is not 
>>> expecting a clean exit of the debugeee? Won't waitFor() wait forever 
>>> in that case? I think by having the vm.dispose() first, you avoid 
>>> that issue.
>>>
>>> Chris
>>>
>>> On 2/6/19 8:04 AM, Gary Adams wrote:
>>>> Testing an alternate fix that will wait for the debugee process to 
>>>> terminate after processing the "quit"
>>>> command before doing the vm tear down.
>>>>
>>>>
>>>> diff --git 
>>>> a/test/hotspot/jtreg/vmTestbase/nsk/share/jdi/Debugee.java 
>>>> b/test/hotspot/jtreg/vmTestbase/nsk/share/jdi/Debugee.java
>>>> --- a/test/hotspot/jtreg/vmTestbase/nsk/share/jdi/Debugee.java
>>>> +++ b/test/hotspot/jtreg/vmTestbase/nsk/share/jdi/Debugee.java
>>>> @@ -1,5 +1,5 @@
>>>>  /*
>>>> - * Copyright (c) 2001, 2018, Oracle and/or its affiliates. All 
>>>> rights reserved.
>>>> + * Copyright (c) 2001, 2019, Oracle and/or its affiliates. All 
>>>> rights reserved.
>>>>   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
>>>>   *
>>>>   * This code is free software; you can redistribute it and/or 
>>>> modify it
>>>> @@ -557,6 +557,7 @@
>>>>       * exit status code.
>>>>       */
>>>>      public int endDebugee() {
>>>> +        int status = waitFor();
>>>>          if (vm != null) {
>>>>              try {
>>>>                  vm.dispose();
>>>> @@ -564,7 +565,7 @@
>>>>              }
>>>>              vm = null;
>>>>          }
>>>> -        return waitFor();
>>>> +        return status;
>>>>      }
>>>>
>>>>
>>>> On 2/6/19, 8:14 AM, Gary Adams wrote:
>>>>> Just a quick update on the failure on shutdown ...
>>>>> I've come across a couple of other tests with a similar failure mode.
>>>>>
>>>>> I'm attempting to get some additional diagnostic information from 
>>>>> these
>>>>> tests with "-jdi.trace=all", but the diagnostic output may be 
>>>>> interfering
>>>>> with the timing.
>>>>>
>>>>> My current investigation is around a possible race condition
>>>>> in the Debgugee.quit() processing.
>>>>>    - the "quit" string is sent to the deuggee via the IOpipe
>>>>>    - the vm.dispose() is handled from the JDWP communication
>>>>>
>>>>> If the context switching is not quick enough, the debugee
>>>>> may not have read and processed the "quit" command before
>>>>> tear down is handled.
>>>>>
>>>>> From earlier comments in the bug report the debuggee was observed
>>>>> still at the breakpoint, so the resume and the disabling of the 
>>>>> breakpoint
>>>>> had not been processed, yet.
>>>>>
>>>>> It might be worth having an "ack" returned when the "quit" is
>>>>> processed in the debugee.
>>>>>
>>>>> ...
>>>>>
>>>>> On 2/1/19, 2:15 PM, serguei.spitsyn at oracle.com wrote:
>>>>>> Hi Gary,
>>>>>>
>>>>>> The debugee.quit() is to complete the session.
>>>>>> It makes this call: sendSignal(SGNL_QUIT);
>>>>>>
>>>>>> A call to the debugee.quit() is at the end of execTest() method:
>>>>>>
>>>>>>             display("");
>>>>>>         }
>>>>>>
>>>>>>         display("");
>>>>>>         display("=============");
>>>>>>         display("TEST FINISHES\n");
>>>>>>
>>>>>>         brkpReq.disable();
>>>>>>         debugee.resume();
>>>>>>         debugee.quit();
>>>>>>     }
>>>>>>
>>>>>> Thanks,
>>>>>> Serguei
>>>>>>
>>>>>>
>>>>>> On 2/1/19 10:00, Gary Adams wrote:
>>>>>>> When the remove_l005 runs to completion, it never signals the 
>>>>>>> debuggee
>>>>>>> that all iterations have completed.
>>>>>>>
>>>>>>>   Issue: https://bugs.openjdk.java.net/browse/JDK-8068225
>>>>>>>
>>>>>>> diff --git a/test/hotspot/jtreg/ProblemList.txt 
>>>>>>> b/test/hotspot/jtreg/ProblemList.txt
>>>>>>> --- a/test/hotspot/jtreg/ProblemList.txt
>>>>>>> +++ b/test/hotspot/jtreg/ProblemList.txt
>>>>>>> @@ -163,7 +163,6 @@
>>>>>>>  vmTestbase/nsk/jdi/EventRequest/setEnabled/setenabled003/TestDescription.java 
>>>>>>> 8066993 generic-all
>>>>>>>  vmTestbase/nsk/jdi/VirtualMachine/redefineClasses/redefineclasses021/TestDescription.java 
>>>>>>> 8065773 generic-all
>>>>>>>  vmTestbase/nsk/jdi/VirtualMachine/redefineClasses/redefineclasses023/TestDescription.java 
>>>>>>> 8065773 generic-all
>>>>>>> -vmTestbase/nsk/jdi/EventQueue/remove_l/remove_l005/TestDescription.java 
>>>>>>> 8068225 generic-all
>>>>>>>
>>>>>>>  vmTestbase/metaspace/gc/firstGC_10m/TestDescription.java 
>>>>>>> 8208250 generic-all
>>>>>>>  vmTestbase/metaspace/gc/firstGC_50m/TestDescription.java 
>>>>>>> 8208250 generic-all
>>>>>>>
>>>>>>>
>>>>>>> diff --git 
>>>>>>> a/test/hotspot/jtreg/vmTestbase/nsk/jdi/EventQueue/remove_l/remove_l005.java 
>>>>>>> b/test/hotspot/jtreg/vmTestbase/nsk/jdi/EventQueue/remove_l/remove_l005.java 
>>>>>>>
>>>>>>> --- 
>>>>>>> a/test/hotspot/jtreg/vmTestbase/nsk/jdi/EventQueue/remove_l/remove_l005.java
>>>>>>> +++ 
>>>>>>> b/test/hotspot/jtreg/vmTestbase/nsk/jdi/EventQueue/remove_l/remove_l005.java
>>>>>>> @@ -1,5 +1,5 @@
>>>>>>>  /*
>>>>>>> - * Copyright (c) 2002, 2018, Oracle and/or its affiliates. All 
>>>>>>> rights reserved.
>>>>>>> + * Copyright (c) 2002, 2019, Oracle and/or its affiliates. All 
>>>>>>> rights reserved.
>>>>>>>   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
>>>>>>>   *
>>>>>>>   * This code is free software; you can redistribute it and/or 
>>>>>>> modify it
>>>>>>> @@ -134,6 +134,7 @@
>>>>>>>              }
>>>>>>>              display("");
>>>>>>>          }
>>>>>>> +        debugee.sendSignal(SGNL_QUIT);
>>>>>>>
>>>>>>>          display("");
>>>>>>>          display("=============");
>>>>>>
>>>>>
>>>>
>>>
>>>
>>
>
>



More information about the serviceability-dev mailing list