# HG changeset patch # Parent 4da240bc298b66a5f7c1543675c7f8b1e4bb3799 diff --git a/test/jdk/java/nio/file/Files/StreamTest.java b/test/jdk/java/nio/file/Files/StreamTest.java --- a/test/jdk/java/nio/file/Files/StreamTest.java +++ b/test/jdk/java/nio/file/Files/StreamTest.java @@ -38,12 +38,14 @@ import java.nio.file.DirectoryStream; import java.nio.file.FileSystemLoopException; import java.nio.file.FileVisitOption; import java.nio.file.Files; +import java.nio.file.LinkOption; import java.nio.file.NoSuchFileException; import java.nio.file.Path; import java.nio.file.Paths; import java.nio.file.attribute.BasicFileAttributes; import java.util.Arrays; import java.util.Collections; +import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Objects; @@ -699,4 +701,28 @@ public class StreamTest { } } } + + public void testFilesListLeakingFd() throws IOException { + LinkOption[] noOptions = new LinkOption[0]; + final Path procfd = Paths.get("/proc/self/fd"); + final Path realself = Paths.get("/proc/self").toRealPath(noOptions); + try { + Set files = Files.list(procfd).collect(Collectors.toSet()); + Set files2 = Files.list(procfd).collect(Collectors.toSet()); + Set diff = new HashSet<>(files2); + diff.removeAll(files); + if (diff.size() > 0) { + System.out.println("/proc/self -> " + realself); + System.out.println("fds: " + files.size()); + System.out.println("fds2: " + files2.size()); + System.out.println("Extra files:" + diff); + for (Path p : diff) { + System.out.println(p + " -> " + p.toRealPath(noOptions)); + } + } + assertEquals(files, files2, "Unexpected file descriptors: "); + } catch (Exception ex) { + ex.printStackTrace(); + } + } }