--- a/test/jdk/java/net/ServerSocket/AcceptCauseFileDescriptorLeak.java Thu Aug 08 18:44:11 2019 +0100
+++ b/test/jdk/java/net/ServerSocket/AcceptCauseFileDescriptorLeak.java Thu Aug 08 21:58:11 2019 +0100
@@ -26,8 +26,11 @@
*
* @test
* @bug 6368984
+ * @key intermittent
* @summary Configuring unconnected Socket before passing to implAccept
- * can cause fd leak
+ * can cause fd leak.
+ * This test may fail intermittently if foreign processes will
+ * try to establish connection to the test server socket.
* @requires (os.family != "windows")
* @library /test/lib
* @build jdk.test.lib.Utils
@@ -43,6 +46,7 @@
import java.io.IOException;
import java.net.InetAddress;
+import java.net.InetSocketAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.List;
@@ -82,7 +86,7 @@
}
}
- final ServerSocket ss = new ServerSocket(0, 0, InetAddress.getLoopbackAddress()) {
+ final ServerSocket ss = new ServerSocket() {
public Socket accept() throws IOException {
Socket s = new Socket() {
};
@@ -91,23 +95,29 @@
return s;
}
};
+ ss.bind(new InetSocketAddress(InetAddress.getLoopbackAddress(), 0));
Thread t = new Thread(new Runnable() {
public void run() {
+ int repsCompleted = 0;
try {
- for (int i = 0; i < REPS; i++) {
+ for (; repsCompleted < REPS; repsCompleted++) {
(new Socket(InetAddress.getLoopbackAddress(), ss.getLocalPort())).close();
}
} catch (IOException e) {
e.printStackTrace();
+ } finally {
+ System.out.println("Client iterations completed:" + repsCompleted);
}
}
});
t.start();
+ int repsCompleted = 0;
try {
- for (int i = 0; i < REPS; i++) {
+ for (; repsCompleted < REPS; repsCompleted++) {
ss.accept().close();
}
} finally {
+ System.out.println("Server iterations completed:" + repsCompleted);
ss.close();
}
t.join();