On 11/Sep/2009 23:13, Mark Hindess wrote:
> I am trying to work through the JDWP java6 branch test failures
> (so is Oliver). I see quite a lot of intermittent failures on
> Linux[0]. I think they are mostly caused by failures at the time
> when the socket used for synchronising the debuggee/debugger
> is being closed. The sychronisation is simply one end calling
> "DataOutputStream.writeUTF("continue"); DataOutputStream.flush();" and
> the other end trying to do DataInputStream.readUTF().
>
> When running on the RI, the tests pass consistently. Strace of the RI
> shows the writeUTF making syscalls like:
>
> send(10, "\0\10continue", 10, 0) = 10
> close(10) = 0
>
> where as our implementation does:
>
> send(58, "\0\10", 2, 0) = 2
> send(58, "continue", 8, 0) = 8
> close(58) = 0
>
> Examining the packet dump for the socket shows a packet containing the
> length ('\0\10') followed by a RST packet as the socket is closed but no
> packet containing the "continue" text. So, the "continue" is lost with
> the result that the other end reads the length then loops waiting for
> the message until the test timeout is reached.[1]
>
> I think it would probably be useful if we fixed our implementation to
> have the same behaviour as the RI.
+1
I'm happy to take a look at that if you want.
Regards,
Tim
> Regards,
> Mark.
>
> [0] I'm using org.apache.harmony.jpda.tests.jdwp.MultiSession.RefTypeIDTest
> for testing but there are plenty of intermittently failing tests to
> choose from.
>
> [1] I wonder why doesn't it see the socket close and bail out? This is
> probably another bug (perhaps with the framework).
>
>
>