8015765: TEST_BUG: java/nio/channels/ServerSocketChannel/AdaptServerSocket.java failing intermittently
Reviewed-by: chegar, dholmes, alanb
Contributed-by: yiming.wang@oracle.com
--- a/jdk/test/java/nio/channels/ServerSocketChannel/AdaptServerSocket.java Thu Aug 15 11:54:05 2013 +0100
+++ b/jdk/test/java/nio/channels/ServerSocketChannel/AdaptServerSocket.java Thu Aug 15 13:42:45 2013 +0100
@@ -35,7 +35,7 @@
public class AdaptServerSocket {
static java.io.PrintStream out = System.out;
-
+ static volatile boolean clientStarted = false;
static volatile Exception clientException = null;
static volatile Thread client = null;
@@ -44,15 +44,14 @@
{
Thread t = new Thread() {
public void run() {
- try {
- Socket so = new Socket();
+ try (Socket so = new Socket()) {
out.println("client: " + so);
+ clientStarted = true;
if (dally > 0)
Thread.sleep(dally);
so.connect(new InetSocketAddress(port));
if (Thread.interrupted()) {
out.println("client interrupted");
- so.close();
return;
}
out.println("client: " + so);
@@ -61,7 +60,6 @@
a += 1;
so.getOutputStream().write(a);
out.println("client: wrote " + a);
- so.close();
} catch (Exception x) {
if (x instanceof InterruptedException)
return;
@@ -78,43 +76,44 @@
static void test(int clientDally, int timeout, boolean shouldTimeout)
throws Exception
{
+ clientStarted = false;
out.println();
- ServerSocketChannel ssc = ServerSocketChannel.open();
- ServerSocket sso = ssc.socket();
- out.println("created: " + ssc);
- out.println(" " + sso);
- if (timeout != 0)
- sso.setSoTimeout(timeout);
- out.println("timeout: " + sso.getSoTimeout());
- sso.bind(null);
- out.println("bound: " + ssc);
- out.println(" " + sso);
- startClient(sso.getLocalPort(), clientDally);
- Thread.sleep(10);
+ try (ServerSocketChannel ssc = ServerSocketChannel.open();
+ ServerSocket sso = ssc.socket()) {
+ out.println("created: " + ssc);
+ out.println(" " + sso);
+ if (timeout != 0)
+ sso.setSoTimeout(timeout);
+ out.println("timeout: " + sso.getSoTimeout());
+ sso.bind(null);
+ out.println("bound: " + ssc);
+ out.println(" " + sso);
+ startClient(sso.getLocalPort(), clientDally);
+ while (!clientStarted) {
+ Thread.sleep(20);
+ }
+ Socket so = null;
+ try {
+ so = sso.accept();
+ } catch (SocketTimeoutException x) {
+ if (shouldTimeout)
+ out.println("Accept timed out, as expected");
+ else
+ throw x;
+ }
+ if (shouldTimeout && (so != null))
+ throw new Exception("Accept did not time out");
- Socket so = null;
- try {
- so = sso.accept();
- } catch (SocketTimeoutException x) {
- if (shouldTimeout)
- out.println("Accept timed out, as expected");
- else
- throw x;
+ if (so != null) {
+ int a = 42;
+ so.getOutputStream().write(a);
+ int b = so.getInputStream().read();
+ if (b != a + 1)
+ throw new Exception("Read incorrect data");
+ out.println("server: read " + b);
+ }
}
- if (shouldTimeout && (so != null))
- throw new Exception("Accept did not time out");
-
- if (so != null) {
- int a = 42;
- so.getOutputStream().write(a);
- int b = so.getInputStream().read();
- if (b != a + 1)
- throw new Exception("Read incorrect data");
- out.println("server: read " + b);
- sso.close();
- }
-
client.interrupt();
client.join();
if (clientException != null)