Still seeing a 1/1000 kill002 failure on solais-sparcv9-debug.

The message waiting for "killing" is working correctly
and only one compound prompt is being delivered.

After all the killing a final cont is issued to proceed to the last breakpoint.
The simple prompt is seen in the pending reply along with exceptions.
Need to understand why it was not a clean kill.


...
Sending command: kill 0x2ee nsk.jdb.kill.kill002.kill002a.exceptions[4]
reply[0]: killing thread: Thread-4
reply[1]: instance of nsk.jdb.kill.kill002.MyThread(name='Thread-4', id=750) 
killed
reply[2]: main[1]
Sending command: threads
reply[0]: Group system:
reply[1]:   (java.lang.ref.Reference$ReferenceHandler)0x17e Reference Handler 
running
reply[2]:   (java.lang.ref.Finalizer$FinalizerThread)0x17f  Finalizer         
cond. waiting
reply[3]:   (java.lang.Thread)0x180                         Signal Dispatcher 
running
reply[4]: Group main:
reply[5]:   (java.lang.Thread)0x1                           main              
running (at breakpoint)
reply[6]:   (nsk.jdb.kill.kill002.MyThread)0x2d2            Thread-0          
cond. waiting
reply[7]:   (nsk.jdb.kill.kill002.MyThread)0x2eb            Thread-1          
cond. waiting
reply[8]:   (nsk.jdb.kill.kill002.MyThread)0x2ec            Thread-2          
cond. waiting
reply[9]:   (nsk.jdb.kill.kill002.MyThread)0x2ed            Thread-3          
cond. waiting
reply[10]:   (nsk.jdb.kill.kill002.MyThread)0x2ee            Thread-4          
cond. waiting
reply[11]: Group InnocuousThreadGroup:
reply[12]:   (jdk.internal.misc.InnocuousThread)0x1a4        Common-Cleaner    
cond. waiting
reply[13]: main[1]
Sending command: cont
receiveReply FAILED due to "nsk.share.Failure: Prompt is not received during 300200 
milliseconds.".
Pending reply output follows:
reply[0]:>  nsk.jdb.kill.kill002.kill002a$MyException: kill002a's Exception
reply[1]:       at nsk.jdb.kill.kill002.kill002a.<clinit>(kill002a.java:49)
reply[2]: java.lang.NullPointerException: kill002a's Exception
reply[3]:       at nsk.jdb.kill.kill002.kill002a.<clinit>(kill002a.java:49)
reply[4]: com.sun.jdi.IncompatibleThreadStateException: kill002a's Exception
reply[5]:       at nsk.jdb.kill.kill002.kill002a.<clinit>(kill002a.java:49)
# ERROR: Caught unexpected exception while executing the test: 
nsk.share.Failure: Prompt is not received during 300200 milliseconds.
The following stacktrace is for failure analysis.
nsk.share.TestFailure: Caught unexpected exception while executing the test: 
nsk.share.Failure: Prompt is not received during 300200 milliseconds.
        at nsk.share.Log.logExceptionForFailureAnalysis(Log.java:428)
        at nsk.share.Log.complain(Log.java:399)
        at nsk.share.jdb.JdbTest.failure(JdbTest.java:74)
        at nsk.share.jdb.JdbTest.runTest(JdbTest.java:158)
        at nsk.jdb.kill.kill002.kill002.run(kill002.java:76)
        at nsk.jdb.kill.kill002.kill002.main(kill002.java:70)
        at 
java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at 
java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at 
java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:566)
        at PropertyResolvingWrapper.main(PropertyResolvingWrapper.java:104)
        at 
java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at 
java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at 
java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:566)
        at 
com.sun.javatest.regtest.agent.MainWrapper$MainThread.run(MainWrapper.java:127)
        at java.base/java.lang.Thread.run(Thread.java:835)


On 10/15/18, 3:16 PM, Chris Plummer wrote:
Hi Gary,

I think the simple prompt is meant to indicate that execution is suspended, but there is no current thread. I don't think that is the case here, so probably best not to use your alternate suggestion of a simple prompt. There doesn't seem to be much purpose in the first prompt being printed. You also seem to just be handling the situation the same as we do for other async commands, so looks good to me.

thanks,

Chris

On 10/15/18 10:44 AM, Gary Adams wrote:
kill ... killing ... killed <prompt>

This bug was filed to cover the issue with the kill002 test,
which sometimes did not consume enough of the reply
messages after the wait for the "killed" message is observed.

When a "kill" command is issued it is processed as an asynchronous
command. The "killing" message is presented before the action is
evaluated, and the "killed" message is presented after the evaluation
returns. When the asynchronous action is completed a prompt is
displayed after restoring the current thread info when the action
was requested.

  Issue: https://bugs.openjdk.java.net/browse/JDK-8211013

Proposed fix:

diff --git a/src/jdk.jdi/share/classes/com/sun/tools/example/debug/tty/TTY.java b/src/jdk.jdi/share/classes/com/sun/tools/example/debug/tty/TTY.java
--- a/src/jdk.jdi/share/classes/com/sun/tools/example/debug/tty/TTY.java
+++ b/src/jdk.jdi/share/classes/com/sun/tools/example/debug/tty/TTY.java
@@ -488,6 +488,7 @@
                             showPrompt = false;
                             evaluator.commandNext();
                         } else if (cmd.equals("kill")) {
+ showPrompt = false; // asynchronous command
                             evaluator.commandKill(t);
                         } else if (cmd.equals("interrupt")) {
                             evaluator.commandInterrupt(t);

Sample output:
...
main[1] threads
Group system:
(java.lang.ref.Reference$ReferenceHandler)0x172 Reference Handler running (java.lang.ref.Finalizer$FinalizerThread)0x173 Finalizer cond. waiting (java.lang.Thread)0x174 Signal Dispatcher running
Group main:
  (java.lang.Thread)0x1 main              running (at breakpoint)
  (nsk.jdb.kill.kill002.MyThread)0x2c9 Thread-0          cond. waiting
  (nsk.jdb.kill.kill002.MyThread)0x2e2 Thread-1          cond. waiting
  (nsk.jdb.kill.kill002.MyThread)0x2e3 Thread-2          cond. waiting
  (nsk.jdb.kill.kill002.MyThread)0x2e4 Thread-3          cond. waiting
  (nsk.jdb.kill.kill002.MyThread)0x2e5 Thread-4          cond. waiting
Group InnocuousThreadGroup:
(jdk.internal.misc.InnocuousThread)0x19a Common-Cleaner cond. waiting
main[1] kill 0x2c9 nsk.jdb.kill.kill002.kill002a.exceptions[0]
killing thread: Thread-0
instance of nsk.jdb.kill.kill002.MyThread(name='Thread-0', id=713) killed
main[1] kill 0x2e2 nsk.jdb.kill.kill002.kill002a.exceptions[1]
killing thread: Thread-1
instance of nsk.jdb.kill.kill002.MyThread(name='Thread-1', id=738) killed
main[1] kill 0x2e3 nsk.jdb.kill.kill002.kill002a.exceptions[2]
killing thread: Thread-2
instance of nsk.jdb.kill.kill002.MyThread(name='Thread-2', id=739) killed
main[1] kill 0x2e4 nsk.jdb.kill.kill002.kill002a.exceptions[3]
killing thread: Thread-3
instance of nsk.jdb.kill.kill002.MyThread(name='Thread-3', id=740) killed
main[1] kill 0x2e5 nsk.jdb.kill.kill002.kill002a.exceptions[4]
killing thread: Thread-4
instance of nsk.jdb.kill.kill002.MyThread(name='Thread-4', id=741) killed
main[1] threads
...

An alternate proposal would include the simple prompt. e.g.
...
main[1] kill 0x2c9 nsk.jdb.kill.kill002.kill002a.exceptions[0]
> killing thread: Thread-0
instance of nsk.jdb.kill.kill002.MyThread(name='Thread-0', id=713) killed
main[1] kill 0x2e2 nsk.jdb.kill.kill002.kill002a.exceptions[1]
> killing thread: Thread-1

Test in progress.



Reply via email to