8202292: java/io/FileOutputStream/UnreferencedFOSClosesFd.java fails with "raw fd count wrong"
Reviewed-by: bpb, mchung
This commit is contained in:
parent
a8a82bb0ba
commit
49396d51e9
test
@ -535,10 +535,6 @@ java/lang/management/ThreadMXBean/ThreadMXBeanStateTest.java 8081652 generic-
|
||||
|
||||
java/io/pathNames/GeneralWin32.java 8180264 windows-all
|
||||
|
||||
java/io/FileInputStream/UnreferencedFISClosesFd.java 8202292 linux-all
|
||||
java/io/FileOutputStream/UnreferencedFOSClosesFd.java 8202292 linux-all
|
||||
java/io/RandomAccessFile/UnreferencedRAFClosesFd.java 8202292 linux-all
|
||||
|
||||
############################################################################
|
||||
|
||||
# jdk_management
|
||||
@ -620,60 +616,60 @@ sun/security/provider/KeyStore/DKSTest.sh 8180266 windows-
|
||||
sun/security/pkcs11/Cipher/ReinitCipher.java 8204203 windows-all
|
||||
sun/security/pkcs11/Cipher/TestPKCS5PaddingError.java 8204203 windows-all
|
||||
sun/security/pkcs11/Cipher/TestRSACipher.java 8204203 windows-all
|
||||
sun/security/pkcs11/Cipher/TestRSACipherWrap.java 8204203 windows-all
|
||||
sun/security/pkcs11/Cipher/TestRawRSACipher.java 8204203 windows-all
|
||||
sun/security/pkcs11/Cipher/TestSymmCiphers.java 8204203 windows-all
|
||||
sun/security/pkcs11/Cipher/TestSymmCiphersNoPad.java 8204203 windows-all
|
||||
sun/security/pkcs11/KeyAgreement/SupportedDHKeys.java 8204203 windows-all
|
||||
sun/security/pkcs11/KeyAgreement/TestDH.java 8204203 windows-all
|
||||
sun/security/pkcs11/KeyAgreement/TestInterop.java 8204203 windows-all
|
||||
sun/security/pkcs11/KeyAgreement/TestShort.java 8204203 windows-all
|
||||
sun/security/pkcs11/KeyAgreement/UnsupportedDHKeys.java 8204203 windows-all
|
||||
sun/security/pkcs11/KeyGenerator/DESParity.java 8204203 windows-all
|
||||
sun/security/pkcs11/KeyGenerator/TestKeyGenerator.java 8204203 windows-all
|
||||
sun/security/pkcs11/KeyPairGenerator/TestDH2048.java 8204203 windows-all
|
||||
sun/security/pkcs11/KeyStore/SecretKeysBasic.sh 8204203 windows-all
|
||||
sun/security/pkcs11/Mac/MacKAT.java 8204203 windows-all
|
||||
sun/security/pkcs11/Mac/MacSameTest.java 8204203 windows-all
|
||||
sun/security/pkcs11/Mac/ReinitMac.java 8204203 windows-all
|
||||
sun/security/pkcs11/MessageDigest/ByteBuffers.java 8204203 windows-all
|
||||
sun/security/pkcs11/MessageDigest/DigestKAT.java 8204203 windows-all
|
||||
sun/security/pkcs11/MessageDigest/ReinitDigest.java 8204203 windows-all
|
||||
sun/security/pkcs11/MessageDigest/TestCloning.java 8204203 windows-all
|
||||
sun/security/pkcs11/Provider/ConfigQuotedString.sh 8204203 windows-all
|
||||
sun/security/pkcs11/Provider/Login.sh 8204203 windows-all
|
||||
sun/security/pkcs11/SampleTest.java 8204203 windows-all
|
||||
sun/security/pkcs11/Secmod/AddPrivateKey.java 8204203 windows-all
|
||||
sun/security/pkcs11/Secmod/Crypto.java 8204203 windows-all
|
||||
sun/security/pkcs11/Secmod/GetPrivateKey.java 8204203 windows-all
|
||||
sun/security/pkcs11/Secmod/JksSetPrivateKey.java 8204203 windows-all
|
||||
sun/security/pkcs11/Secmod/LoadKeystore.java 8204203 windows-all
|
||||
sun/security/pkcs11/Secmod/TestNssDbSqlite.java 8204203 windows-all
|
||||
sun/security/pkcs11/SecureRandom/Basic.java 8204203 windows-all
|
||||
sun/security/pkcs11/SecureRandom/TestDeserialization.java 8204203 windows-all
|
||||
sun/security/pkcs11/Serialize/SerializeProvider.java 8204203 windows-all
|
||||
sun/security/pkcs11/Signature/ByteBuffers.java 8204203 windows-all
|
||||
sun/security/pkcs11/Signature/ReinitSignature.java 8204203 windows-all
|
||||
sun/security/pkcs11/Signature/TestDSA.java 8204203 windows-all
|
||||
sun/security/pkcs11/Signature/TestDSAKeyLength.java 8204203 windows-all
|
||||
sun/security/pkcs11/Signature/TestRSAKeyLength.java 8204203 windows-all
|
||||
sun/security/pkcs11/ec/ReadCertificates.java 8204203 windows-all
|
||||
sun/security/pkcs11/ec/ReadPKCS12.java 8204203 windows-all
|
||||
sun/security/pkcs11/ec/TestCurves.java 8204203 windows-all
|
||||
sun/security/pkcs11/ec/TestECDH.java 8204203 windows-all
|
||||
sun/security/pkcs11/ec/TestECDH2.java 8204203 windows-all
|
||||
sun/security/pkcs11/ec/TestECDSA.java 8204203 windows-all
|
||||
sun/security/pkcs11/ec/TestECDSA2.java 8204203 windows-all
|
||||
sun/security/pkcs11/ec/TestECGenSpec.java 8204203 windows-all
|
||||
sun/security/pkcs11/rsa/KeyWrap.java 8204203 windows-all
|
||||
sun/security/pkcs11/rsa/TestCACerts.java 8204203 windows-all
|
||||
sun/security/pkcs11/rsa/TestKeyFactory.java 8204203 windows-all
|
||||
sun/security/pkcs11/rsa/TestKeyPairGenerator.java 8204203 windows-all
|
||||
sun/security/pkcs11/rsa/TestSignatures.java 8204203 windows-all
|
||||
sun/security/pkcs11/sslecc/ClientJSSEServerJSSE.java 8204203 windows-all
|
||||
sun/security/pkcs11/tls/TestLeadingZeroesP11.java 8204203 windows-all
|
||||
sun/security/pkcs11/tls/TestMasterSecret.java 8204203 windows-all
|
||||
sun/security/pkcs11/tls/TestPRF.java 8204203 windows-all
|
||||
sun/security/pkcs11/Cipher/TestRSACipherWrap.java 8204203 windows-all
|
||||
sun/security/pkcs11/Cipher/TestRawRSACipher.java 8204203 windows-all
|
||||
sun/security/pkcs11/Cipher/TestSymmCiphers.java 8204203 windows-all
|
||||
sun/security/pkcs11/Cipher/TestSymmCiphersNoPad.java 8204203 windows-all
|
||||
sun/security/pkcs11/KeyAgreement/SupportedDHKeys.java 8204203 windows-all
|
||||
sun/security/pkcs11/KeyAgreement/TestDH.java 8204203 windows-all
|
||||
sun/security/pkcs11/KeyAgreement/TestInterop.java 8204203 windows-all
|
||||
sun/security/pkcs11/KeyAgreement/TestShort.java 8204203 windows-all
|
||||
sun/security/pkcs11/KeyAgreement/UnsupportedDHKeys.java 8204203 windows-all
|
||||
sun/security/pkcs11/KeyGenerator/DESParity.java 8204203 windows-all
|
||||
sun/security/pkcs11/KeyGenerator/TestKeyGenerator.java 8204203 windows-all
|
||||
sun/security/pkcs11/KeyPairGenerator/TestDH2048.java 8204203 windows-all
|
||||
sun/security/pkcs11/KeyStore/SecretKeysBasic.sh 8204203 windows-all
|
||||
sun/security/pkcs11/Mac/MacKAT.java 8204203 windows-all
|
||||
sun/security/pkcs11/Mac/MacSameTest.java 8204203 windows-all
|
||||
sun/security/pkcs11/Mac/ReinitMac.java 8204203 windows-all
|
||||
sun/security/pkcs11/MessageDigest/ByteBuffers.java 8204203 windows-all
|
||||
sun/security/pkcs11/MessageDigest/DigestKAT.java 8204203 windows-all
|
||||
sun/security/pkcs11/MessageDigest/ReinitDigest.java 8204203 windows-all
|
||||
sun/security/pkcs11/MessageDigest/TestCloning.java 8204203 windows-all
|
||||
sun/security/pkcs11/Provider/ConfigQuotedString.sh 8204203 windows-all
|
||||
sun/security/pkcs11/Provider/Login.sh 8204203 windows-all
|
||||
sun/security/pkcs11/SampleTest.java 8204203 windows-all
|
||||
sun/security/pkcs11/Secmod/AddPrivateKey.java 8204203 windows-all
|
||||
sun/security/pkcs11/Secmod/Crypto.java 8204203 windows-all
|
||||
sun/security/pkcs11/Secmod/GetPrivateKey.java 8204203 windows-all
|
||||
sun/security/pkcs11/Secmod/JksSetPrivateKey.java 8204203 windows-all
|
||||
sun/security/pkcs11/Secmod/LoadKeystore.java 8204203 windows-all
|
||||
sun/security/pkcs11/Secmod/TestNssDbSqlite.java 8204203 windows-all
|
||||
sun/security/pkcs11/SecureRandom/Basic.java 8204203 windows-all
|
||||
sun/security/pkcs11/SecureRandom/TestDeserialization.java 8204203 windows-all
|
||||
sun/security/pkcs11/Serialize/SerializeProvider.java 8204203 windows-all
|
||||
sun/security/pkcs11/Signature/ByteBuffers.java 8204203 windows-all
|
||||
sun/security/pkcs11/Signature/ReinitSignature.java 8204203 windows-all
|
||||
sun/security/pkcs11/Signature/TestDSA.java 8204203 windows-all
|
||||
sun/security/pkcs11/Signature/TestDSAKeyLength.java 8204203 windows-all
|
||||
sun/security/pkcs11/Signature/TestRSAKeyLength.java 8204203 windows-all
|
||||
sun/security/pkcs11/ec/ReadCertificates.java 8204203 windows-all
|
||||
sun/security/pkcs11/ec/ReadPKCS12.java 8204203 windows-all
|
||||
sun/security/pkcs11/ec/TestCurves.java 8204203 windows-all
|
||||
sun/security/pkcs11/ec/TestECDH.java 8204203 windows-all
|
||||
sun/security/pkcs11/ec/TestECDH2.java 8204203 windows-all
|
||||
sun/security/pkcs11/ec/TestECDSA.java 8204203 windows-all
|
||||
sun/security/pkcs11/ec/TestECDSA2.java 8204203 windows-all
|
||||
sun/security/pkcs11/ec/TestECGenSpec.java 8204203 windows-all
|
||||
sun/security/pkcs11/rsa/KeyWrap.java 8204203 windows-all
|
||||
sun/security/pkcs11/rsa/TestCACerts.java 8204203 windows-all
|
||||
sun/security/pkcs11/rsa/TestKeyFactory.java 8204203 windows-all
|
||||
sun/security/pkcs11/rsa/TestKeyPairGenerator.java 8204203 windows-all
|
||||
sun/security/pkcs11/rsa/TestSignatures.java 8204203 windows-all
|
||||
sun/security/pkcs11/sslecc/ClientJSSEServerJSSE.java 8204203 windows-all
|
||||
sun/security/pkcs11/tls/TestLeadingZeroesP11.java 8204203 windows-all
|
||||
sun/security/pkcs11/tls/TestMasterSecret.java 8204203 windows-all
|
||||
sun/security/pkcs11/tls/TestPRF.java 8204203 windows-all
|
||||
sun/security/pkcs11/tls/TestPremaster.java 8204203 windows-all
|
||||
|
||||
############################################################################
|
||||
|
@ -25,6 +25,8 @@
|
||||
*
|
||||
* @test
|
||||
* @modules java.base/java.io:open
|
||||
* @library /test/lib
|
||||
* @build jdk.test.lib.util.FileUtils UnreferencedFISClosesFd
|
||||
* @bug 6524062
|
||||
* @summary Test to ensure that FIS.finalize() invokes the close() method as per
|
||||
* the specification.
|
||||
@ -41,18 +43,15 @@ import java.lang.ref.Reference;
|
||||
import java.lang.ref.ReferenceQueue;
|
||||
import java.lang.ref.WeakReference;
|
||||
import java.lang.reflect.Field;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.nio.file.Paths;
|
||||
import java.util.ArrayDeque;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.concurrent.atomic.AtomicInteger;
|
||||
|
||||
import com.sun.management.UnixOperatingSystemMXBean;
|
||||
|
||||
import jdk.test.lib.util.FileUtils;
|
||||
|
||||
/**
|
||||
* Tests for FIS unreferenced.
|
||||
* - Not subclassed - cleaner cleanup
|
||||
@ -146,8 +145,8 @@ public class UnreferencedFISClosesFd {
|
||||
|
||||
String name = inFile.getPath();
|
||||
|
||||
FileUtils.listFileDescriptors(System.out);
|
||||
long fdCount0 = getFdCount();
|
||||
System.out.printf("initial count of open file descriptors: %d%n", fdCount0);
|
||||
|
||||
int failCount = 0;
|
||||
failCount += test(new FileInputStream(name), CleanupType.CLEANER);
|
||||
@ -166,11 +165,10 @@ public class UnreferencedFISClosesFd {
|
||||
|
||||
// Check the final count of open file descriptors
|
||||
long fdCount = getFdCount();
|
||||
System.out.printf("final count of open file descriptors: %d%n", fdCount);
|
||||
if (fdCount != fdCount0) {
|
||||
listProcFD();
|
||||
throw new AssertionError("raw fd count wrong: expected: " + fdCount0
|
||||
+ ", actual: " + fdCount);
|
||||
System.out.printf("initial count of open file descriptors: %d%n", fdCount0);
|
||||
System.out.printf("final count of open file descriptors: %d%n", fdCount);
|
||||
FileUtils.listFileDescriptors(System.out);
|
||||
}
|
||||
}
|
||||
|
||||
@ -274,27 +272,4 @@ public class UnreferencedFISClosesFd {
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Method to list the open file descriptors (if supported by the 'lsof' command).
|
||||
*/
|
||||
static void listProcFD() {
|
||||
List<String> lsofDirs = List.of("/usr/bin", "/usr/sbin");
|
||||
Optional<Path> lsof = lsofDirs.stream()
|
||||
.map(s -> Paths.get(s, "lsof"))
|
||||
.filter(f -> Files.isExecutable(f))
|
||||
.findFirst();
|
||||
lsof.ifPresent(exe -> {
|
||||
try {
|
||||
System.out.printf("Open File Descriptors:%n");
|
||||
long pid = ProcessHandle.current().pid();
|
||||
ProcessBuilder pb = new ProcessBuilder(exe.toString(), "-p", Integer.toString((int) pid));
|
||||
pb.inheritIO();
|
||||
Process p = pb.start();
|
||||
p.waitFor(10, TimeUnit.SECONDS);
|
||||
} catch (IOException | InterruptedException ie) {
|
||||
ie.printStackTrace();
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
@ -25,6 +25,8 @@
|
||||
*
|
||||
* @test
|
||||
* @modules java.base/java.io:open
|
||||
* @library /test/lib
|
||||
* @build jdk.test.lib.util.FileUtils UnreferencedFOSClosesFd
|
||||
* @bug 6524062
|
||||
* @summary Test to ensure that FOS.finalize() invokes the close() method as per
|
||||
* the specification.
|
||||
@ -41,11 +43,15 @@ import java.lang.ref.Reference;
|
||||
import java.lang.ref.ReferenceQueue;
|
||||
import java.lang.ref.WeakReference;
|
||||
import java.lang.reflect.Field;
|
||||
import java.nio.file.Path;
|
||||
import java.util.ArrayDeque;
|
||||
import java.util.HashSet;
|
||||
import java.util.concurrent.atomic.AtomicInteger;
|
||||
|
||||
import com.sun.management.UnixOperatingSystemMXBean;
|
||||
|
||||
import jdk.test.lib.util.FileUtils;
|
||||
|
||||
public class UnreferencedFOSClosesFd {
|
||||
|
||||
enum CleanupType {
|
||||
@ -133,8 +139,8 @@ public class UnreferencedFOSClosesFd {
|
||||
|
||||
String name = inFile.getPath();
|
||||
|
||||
FileUtils.listFileDescriptors(System.out);
|
||||
long fdCount0 = getFdCount();
|
||||
System.out.printf("initial count of open file descriptors: %d%n", fdCount0);
|
||||
|
||||
int failCount = 0;
|
||||
failCount += test(new FileOutputStream(name), CleanupType.CLEANER);
|
||||
@ -153,10 +159,10 @@ public class UnreferencedFOSClosesFd {
|
||||
|
||||
// Check the final count of open file descriptors
|
||||
long fdCount = getFdCount();
|
||||
System.out.printf("final count of open file descriptors: %d%n", fdCount);
|
||||
if (fdCount != fdCount0) {
|
||||
throw new AssertionError("raw fd count wrong: expected: " + fdCount0
|
||||
+ ", actual: " + fdCount);
|
||||
System.out.printf("initial count of open file descriptors: %d%n", fdCount0);
|
||||
System.out.printf("final count of open file descriptors: %d%n", fdCount);
|
||||
FileUtils.listFileDescriptors(System.out);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -24,6 +24,7 @@
|
||||
import java.io.File;
|
||||
import java.io.FileDescriptor;
|
||||
import java.io.FileNotFoundException;
|
||||
import java.io.IOException;
|
||||
import java.io.RandomAccessFile;
|
||||
import java.lang.management.ManagementFactory;
|
||||
import java.lang.management.OperatingSystemMXBean;
|
||||
@ -32,13 +33,19 @@ import java.lang.ref.Reference;
|
||||
import java.lang.ref.ReferenceQueue;
|
||||
import java.lang.ref.WeakReference;
|
||||
import java.lang.reflect.Field;
|
||||
import java.nio.file.Path;
|
||||
import java.util.ArrayDeque;
|
||||
import java.util.HashSet;
|
||||
|
||||
import com.sun.management.UnixOperatingSystemMXBean;
|
||||
|
||||
import jdk.test.lib.util.FileUtils;
|
||||
|
||||
/**
|
||||
* @test
|
||||
* @bug 8080225
|
||||
* @library /test/lib
|
||||
* @build jdk.test.lib.util.FileUtils UnreferencedRAFClosesFd
|
||||
* @modules java.base/java.io:open
|
||||
* @summary Test to ensure that an unclosed and unreferenced RandomAccessFile closes the fd
|
||||
* @run main/othervm UnreferencedRAFClosesFd
|
||||
@ -54,8 +61,8 @@ public class UnreferencedRAFClosesFd {
|
||||
inFile.createNewFile();
|
||||
inFile.deleteOnExit();
|
||||
|
||||
FileUtils.listFileDescriptors(System.out);
|
||||
long fdCount0 = getFdCount();
|
||||
System.out.printf("initial count of open file descriptors: %d%n", fdCount0);
|
||||
|
||||
String name = inFile.getPath();
|
||||
RandomAccessFile raf;
|
||||
@ -101,10 +108,10 @@ public class UnreferencedRAFClosesFd {
|
||||
|
||||
// Check the final count of open file descriptors
|
||||
long fdCount = getFdCount();
|
||||
System.out.printf("final count of open file descriptors: %d%n", fdCount);
|
||||
if (fdCount != fdCount0) {
|
||||
throw new AssertionError("raw fd count wrong: expected: " + fdCount0
|
||||
+ ", actual: " + fdCount);
|
||||
System.out.printf("initial count of open file descriptors: %d%n", fdCount0);
|
||||
System.out.printf("final count of open file descriptors: %d%n", fdCount);
|
||||
FileUtils.listFileDescriptors(System.out);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2017, 2018, 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
|
||||
@ -26,18 +26,26 @@ package jdk.test.lib.util;
|
||||
import jdk.test.lib.Platform;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.PrintStream;
|
||||
import java.io.UncheckedIOException;
|
||||
import java.lang.ProcessBuilder.Redirect;
|
||||
import java.nio.file.DirectoryNotEmptyException;
|
||||
import java.nio.file.FileVisitResult;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.NoSuchFileException;
|
||||
import java.nio.file.Path;
|
||||
import java.nio.file.Paths;
|
||||
import java.nio.file.SimpleFileVisitor;
|
||||
import java.nio.file.attribute.BasicFileAttributes;
|
||||
import java.time.Instant;
|
||||
import java.time.Duration;
|
||||
import java.util.ArrayList;
|
||||
import java.util.ArrayDeque;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
|
||||
/**
|
||||
* Common library for various test file utility functions.
|
||||
*/
|
||||
@ -227,4 +235,42 @@ public final class FileUtils {
|
||||
}
|
||||
return areFileSystemsAccessible;
|
||||
}
|
||||
|
||||
/**
|
||||
* List the open file descriptors (if supported by the 'lsof' command).
|
||||
* @param ps a printStream to send the output to
|
||||
* @throws UncheckedIOException if an error occurs
|
||||
*/
|
||||
public static void listFileDescriptors(PrintStream ps) {
|
||||
List<String> lsofDirs = List.of("/usr/bin", "/usr/sbin");
|
||||
Optional<Path> lsof = lsofDirs.stream()
|
||||
.map(s -> Paths.get(s, "lsof"))
|
||||
.filter(f -> Files.isExecutable(f))
|
||||
.findFirst();
|
||||
lsof.ifPresent(exe -> {
|
||||
try {
|
||||
ps.printf("Open File Descriptors:%n");
|
||||
long pid = ProcessHandle.current().pid();
|
||||
ProcessBuilder pb = new ProcessBuilder(exe.toString(), "-p", Integer.toString((int) pid));
|
||||
pb.redirectErrorStream(true); // combine stderr and stdout
|
||||
pb.redirectOutput(Redirect.PIPE);
|
||||
|
||||
Process p = pb.start();
|
||||
Instant start = Instant.now();
|
||||
p.getInputStream().transferTo(ps);
|
||||
|
||||
try {
|
||||
int timeout = 10;
|
||||
if (!p.waitFor(timeout, TimeUnit.SECONDS)) {
|
||||
System.out.printf("waitFor timed out: %d%n", timeout);
|
||||
}
|
||||
} catch (InterruptedException ie) {
|
||||
throw new IOException("interrupted", ie);
|
||||
}
|
||||
ps.println();
|
||||
} catch (IOException ioe) {
|
||||
throw new UncheckedIOException("error listing file descriptors", ioe);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user