6935233: java/net/ServerSocket/AcceptCauseFileDescriptorLeak.java fails with modules build

Reviewed-by: alanb
This commit is contained in:
Chris Hegarty 2010-03-19 13:07:42 +00:00
parent 7268d4595b
commit 6fb9ea7278
3 changed files with 54 additions and 36 deletions

View File

@ -643,9 +643,6 @@ java/net/ipv6tests/TcpTest.java generic-all
# Linux i586, fails with unexpected output
java/net/MulticastSocket/NoLoopbackPackets.java linux-i586
# Times out on windows x64, fails with samevm on solaris 11 i586
java/net/ServerSocket/AcceptCauseFileDescriptorLeak.java generic-all
# Address already in use
java/net/DatagramSocket/DatagramTimeout.java generic-all

View File

@ -22,17 +22,16 @@
*/
/*
* @test
* @summary configuring unconnected Socket before passing to implAccept can cause fd leak
* @bug 6368984
* @author Edward Wang
* Test run from script, AcceptCauseFileDescriptorLeak.sh
* author Edward Wang
*/
import java.io.*;
import java.net.*;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
public class AcceptCauseFileDescriptorLeak {
private static final int REPS = 1000;
private static final int REPS = 2048;
public static void main(String[] args) throws Exception {
final ServerSocket ss = new ServerSocket(0) {
@ -60,31 +59,5 @@ public class AcceptCauseFileDescriptorLeak {
}
ss.close();
t.join();
//
// The threshold 20 below is a little arbitrary. The point here is that
// the remaining open file descriptors should be constant independent
// of REPS.
//
if (countOpenFD() > 20) {
throw new RuntimeException("File descriptor leak detected.");
}
}
/*
* Actually, this approach to count open file descriptors only
* works for Solaris/Linux. On Windows platform, this method
* will simply return zero. So the test will always be passed
* on Windows, too.
*/
private static int countOpenFD() {
File dirOfFD = new File("/proc/self/fd");
File[] fds = dirOfFD.listFiles();
if (fds != null)
return fds.length;
else
return 0;
}
}

View File

@ -0,0 +1,48 @@
#
# Copyright 2010 Sun Microsystems, Inc. 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
# under the terms of the GNU General Public License version 2 only, as
# published by the Free Software Foundation.
#
# This code is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
# version 2 for more details (a copy is included in the LICENSE file that
# accompanied this code).
#
# You should have received a copy of the GNU General Public License version
# 2 along with this work; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
#
# Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
# CA 95054 USA or visit www.sun.com if you need additional information or
# have any questions.
#
# @test
# @bug 6368984
# @summary configuring unconnected Socket before passing to implAccept can cause fd leak
# @build AcceptCauseFileDescriptorLeak
# @run shell AcceptCauseFileDescriptorLeak.sh
OS=`uname -s`
case "$OS" in
Windows_* | CYGWIN* )
echo "ulimit not on Windows"
exit 0
;;
* )
CLASSPATH=${TESTCLASSES}:${TESTSRC}
;;
esac
export CLASSPATH
# hard limit needs to be less than 1024 for this bug
NOFILES=`ulimit -n -H`
if [ "$NOFILES" = "unlimited" ] || [ $NOFILES -ge 1024 ]; then
ulimit -n 1024
fi
${TESTJAVA}/bin/java AcceptCauseFileDescriptorLeak