8151582: (ch) test java/nio/channels/AsyncCloseAndInterrupt.java failing due to "Connection succeeded"
Reviewed-by: bpb, rriggs, alanb
Contributed-by: huaming.li@oracle.com
--- a/jdk/test/java/nio/channels/AsyncCloseAndInterrupt.java Sun Mar 20 00:03:43 2016 +0000
+++ b/jdk/test/java/nio/channels/AsyncCloseAndInterrupt.java Sun Mar 20 07:35:20 2016 +0000
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2002, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2002, 2016, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -23,6 +23,7 @@
/* @test
* @bug 4460583 4470470 4840199 6419424 6710579 6596323 6824135 6395224 7142919
+ * 8151582
* @run main/othervm AsyncCloseAndInterrupt
* @summary Comprehensive test of asynchronous closing and interruption
* @author Mark Reinhold
@@ -89,7 +90,7 @@
private static void initRefuser() throws IOException {
refuser = ServerSocketChannel.open();
- refuser.socket().bind(wildcardAddress);
+ refuser.bind(wildcardAddress, 1); // use minimum backlog
}
// Dead pipe source and sink
@@ -349,7 +350,7 @@
static final Op CONNECT = new Op("connect") {
void setup() {
- waitPump("connect wait for pumping refuser ...");
+ waitPump("connect waiting for pumping refuser ...");
}
void doIO(InterruptibleChannel ich) throws IOException {
SocketChannel sc = (SocketChannel)ich;
@@ -361,7 +362,7 @@
static final Op FINISH_CONNECT = new Op("finishConnect") {
void setup() {
- waitPump("finishConnect wait for pumping refuser ...");
+ waitPump("finishConnect waiting for pumping refuser ...");
}
void doIO(InterruptibleChannel ich) throws IOException {
SocketChannel sc = (SocketChannel)ich;
@@ -498,12 +499,11 @@
private static volatile boolean pumpReady = false;
private static void waitPump(String msg){
- pumpReady = false;
log.println(msg);
-
while (!pumpReady){
sleep(200);
}
+ log.println(msg + " done");
}
// Create a pump thread dedicated to saturate refuser's connection backlog
@@ -520,28 +520,34 @@
// Saturate the refuser's connection backlog so that further connection
// attempts will be blocked
+ pumpReady = false;
while (!pumpDone) {
SocketChannel sc = SocketChannel.open();
sc.configureBlocking(false);
boolean connected = sc.connect(refuser.socket().getLocalSocketAddress());
// Assume that the connection backlog is saturated if a
- // client cannot connect to the refuser within 50 miliseconds
+ // client cannot connect to the refuser within 50 milliseconds
long start = System.currentTimeMillis();
- while (!connected && (System.currentTimeMillis() - start < 50)) {
+ while (!pumpReady && !connected
+ && (System.currentTimeMillis() - start < 50)) {
connected = sc.finishConnect();
}
if (connected) {
// Retain so that finalizer doesn't close
refuserClients.add(sc);
- pumpReady = false;
} else {
sc.close();
pumpReady = true;
}
}
+ for (SocketChannel sc : refuserClients) {
+ sc.close();
+ }
+ refuser.close();
+
log.println("Stop pumping refuser ...");
return refuserClients.size();
}
@@ -565,8 +571,6 @@
sleep(50);
} while (!t.ready);
- sleep(100);
-
switch (test) {
case TEST_INTR: