Ok. I think the fix is fine then if this is the only test that was
problematic.
Chris
On 2/6/19 11:02 AM, Gary Adams wrote:
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.spit...@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("=============");