8198928: (so) SocketChannel connect may deadlock if closed at around same time that connect fails

Alan Bateman Alan.Bateman at oracle.com
Tue Mar 6 10:04:31 UTC 2018


On 06/03/2018 08:39, Hamlin Li wrote:
>
> Hi Alan,
>
> I have minor comment about CloseDuringConnect.java, is it better to 
> move following code from main() to test()?
>
> SocketAddress remote = new InetSocketAddress("127.0.0.1", Utils.getFreePort());
>
> It will reduce the chance to interfere with other tests which run 
> concurrently and also create a listening socket at THE free port same 
> as this test.
>
Good question! There is a general issue with tests that need a free 
port, or a refusing endpoint in this case. Ideally jtreg would support a 
per test equivalent of exclusiveAccess.dirs, that way tests can at least 
reduce interference from tests that execute concurrently without needing 
to put the test in a special directory.

The issue with Utils.getFreePort in the test infrastructure library is 
that it sleeps for 100ms. This test results makes 100 attempts to 
connect to a refusing endpoint so calling getFreePort before each 
attempt adds significantly to the execution time. Would you have cycles 
to check into the getFreePort implementation? I suspect the original 
rational was to handle cases where the system is out of resources but it 
doesn't catch IOException and sleeps before the first attempt. I didn't 
want to change it with this patch as it is used by a lot of other tests.

In the mean-time, maybe we can address your concern by just replacing 
the use of Utils.getFreePort in this test with its own refusingEndpoint 
method. I've updated the webrev in place so you can see if you agree. If 
we get Utils.getFreePort fixed then we can replace this usage, probably 
other cases like this in other tests too.

-Alan


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.openjdk.java.net/pipermail/nio-dev/attachments/20180306/18665941/attachment.html>


More information about the nio-dev mailing list