JDK 9 RFR of JDK-8156002: java/nio/channels/SocketChannel/AdaptSocket.java Fails in Mesos on OSX

Daniel Fuchs daniel.fuchs at oracle.com
Fri May 6 12:24:42 UTC 2016

On 06/05/16 14:14, Hamlin Li wrote:
> On 2016/5/6 15:45, Daniel Fuchs wrote:
>> On 5/6/16 8:58 AM, Hamlin Li wrote:
>>> Please review the patch for
>>> java/nio/channels/SocketChannel/AdaptSocket.java Fails in Mesos on OSX.
>>> Root Cause: it's kind of race condition due to linger time and timeout
>>> time. Even though timeout(10ms) is far less than linger time(100ms), but
>>> in some condition the linger time is still not long enough.
>>> Suggested Fix: create a NoResponseServer which will accept connection
>>> but never response to any input.
>>> bug: https://bugs.openjdk.java.net/browse/JDK-8156002
>>> webrev: http://cr.openjdk.java.net/~mli/8156002/webrev.01/
>> Hi Hamlin,
>> The idea is very good, but I wonder about the implementation.
>> calling super(Long.MAX_VALUE) will make the NoResponseServer
>> wait forever in the accept loop line 223 - while I think that
>> for the spirit of this test we want the accept loop to
>> proceed normally, but linger instead in the connection
>> thread, line 372.
> Hi Daniel,
> Thanks for reviewing. Please let me clarify.
> Yes, NoResponseServer will wait forever in the accept loop line 223 (in
> TestServers.java). But,
>  1. As we only need only one connection, so it does not matter,
> NoResponseServer will accept one connection at line 222 (in
> TestServers.java) and not response to any input from the client connection.
>  2. Even if there are 2 or more connections coming, NoResponseServer
> will still work as expected. In java code level as you mentioned it will
> wait forever in the accept loop at line 223 (in TestServers.java), but
> real TCP accept operation will be finished by TCP stack once the
> ServerSocket object is constructed, so real TCP accept operation will
> not be blocked at line 223 (in TestServers.java). So although
> NoResponseServer will wait forever at line 223 (in TestServers.java), it
> can accept multiple connections.
> The test pass JPRT:
> http://scaaa637.us.oracle.com/archive/2016/05/2016-05-06-070151.oracle.dev/.
> It works well even if line 175 (in AdaptSocket.java) is looped for 100
> times.

Oh - right - the first connection will be accepted before the
server lingers and there is only one connection - so it does
not matter where it actually lingers.

OK then, +1 me :-)

best regards,

-- daniel

> Thank you
> -Hamlin
>> Or am I mistaken?
>> best regards,
>> -- daniel

More information about the nio-dev mailing list