6999915: TEST_BUG: test/java/nio/channels/AsynchronousSocketChannel/Leaky.java failed intermittently (win)
Reviewed-by: forax
--- a/jdk/test/java/nio/channels/AsynchronousSocketChannel/Leaky.java Sun Nov 14 07:22:39 2010 -0800
+++ b/jdk/test/java/nio/channels/AsynchronousSocketChannel/Leaky.java Mon Nov 15 14:34:04 2010 +0000
@@ -22,15 +22,19 @@
*/
/* @test
- * @bug 4607272
+ * @bug 4607272 6999915
* @summary Unit test for AsynchronousSocketChannel
- * @run main/othervm -XX:+DisableExplicitGC -mx64m Leaky
+ * @run main/othervm -XX:+DisableExplicitGC -XX:MaxDirectMemorySize=64m Leaky
*/
import java.nio.ByteBuffer;
+import java.nio.BufferPoolMXBean;
import java.nio.channels.*;
import java.net.*;
+import java.util.List;
import java.util.concurrent.Future;
+import java.util.concurrent.ThreadFactory;
+import java.lang.management.ManagementFactory;
/**
* Heap buffers must be substituted with direct buffers when doing I/O. This
@@ -49,13 +53,13 @@
private final ByteBuffer dst;
private Future<Integer> readResult;
- Connection() throws Exception {
+ Connection(AsynchronousChannelGroup group) throws Exception {
ServerSocketChannel ssc =
ServerSocketChannel.open().bind(new InetSocketAddress(0));
InetAddress lh = InetAddress.getLocalHost();
int port = ((InetSocketAddress)(ssc.getLocalAddress())).getPort();
SocketAddress remote = new InetSocketAddress(lh, port);
- client = AsynchronousSocketChannel.open();
+ client = AsynchronousSocketChannel.open(group);
client.connect(remote).get();
peer = ssc.accept();
ssc.close();
@@ -77,11 +81,21 @@
}
public static void main(String[] args) throws Exception {
+ ThreadFactory threadFactory = new ThreadFactory() {
+ @Override
+ public Thread newThread(Runnable r) {
+ Thread t = new Thread(r);
+ t.setDaemon(true);
+ return t;
+ }
+ };
+ AsynchronousChannelGroup group =
+ AsynchronousChannelGroup.withFixedThreadPool(4, threadFactory);
final int CONNECTION_COUNT = 10;
Connection[] connections = new Connection[CONNECTION_COUNT];
for (int i=0; i<CONNECTION_COUNT; i++) {
- connections[i] = new Connection();
+ connections[i] = new Connection(group);
}
for (int i=0; i<1024; i++) {
@@ -100,5 +114,20 @@
conn.finishRead();
}
}
+
+ // print summary of buffer pool usage
+ List<BufferPoolMXBean> pools =
+ ManagementFactory.getPlatformMXBeans(BufferPoolMXBean.class);
+ for (BufferPoolMXBean pool: pools)
+ System.out.format(" %8s ", pool.getName());
+ System.out.println();
+ for (int i=0; i<pools.size(); i++)
+ System.out.format("%6s %10s %10s ", "Count", "Capacity", "Memory");
+ System.out.println();
+ for (BufferPoolMXBean pool: pools) {
+ System.out.format("%6d %10d %10d ",
+ pool.getCount(), pool.getTotalCapacity(), pool.getMemoryUsed());
+ }
+ System.out.println();
}
}