thierry Martinez created IO-760:
-----------------------------------
Summary: FileUtils.iterateFiles create Too many open files
Key: IO-760
URL: https://issues.apache.org/jira/browse/IO-760
Project: Commons IO
Issue Type: Bug
Components: Utilities
Affects Versions: 2.11.0
Environment: Commons-io 2.11.0
Java 11
Linux
Reporter: thierry Martinez
When i use FileUtils.iterateFiles and i decide to not iterate on all results,
something is not closed correctly.
This code create "Too Many Open files":
{code:java}
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.util.Iterator;
import org.apache.commons.io.FileUtils;public class FileUtilsTest {
static long step=0;
public static void main(String[] argv) throws IOException {
/*
* create test directory
*/
File tmpDirectory = Files.createTempDirectory("pipo").toFile();
try {
/*
* add one file
*/
new File(tmpDirectory, "first").createNewFile(); /*
* try until TooManyOpenFiles Exception
*/
while(true) {
/*
* Iterate only to find first entry
*/
Iterator<File> candidates =
FileUtils.iterateFiles(tmpDirectory, null, false);
if (!candidates.hasNext()) {
throw new RuntimeException("one file must exists");
}
System.out.print("\rend step:"+(++step));
}
} finally {
FileUtils.deleteDirectory(tmpDirectory);
}
}}
{code}
Exception trace:
{code:java}
java -cp Bug-all.jar FileUtilsTest
end step:2044
Exception in thread "main" java.io.UncheckedIOException:
/tmp/pipo4192501847009771344
at org.apache.commons.io.FileUtils.iterateFiles(FileUtils.java:1927)
at FileUtilsTest.main(FileUtilsTest.java:28)
Caused by: java.nio.file.FileSystemException: /tmp/pipo4192501847009771344: Too
many open files
at
java.base/sun.nio.fs.UnixException.translateToIOException(UnixException.java:100)
at
java.base/sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:111)
at
java.base/sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:116)
at
java.base/sun.nio.fs.UnixFileSystemProvider.newDirectoryStream(UnixFileSystemProvider.java:432)
at java.base/java.nio.file.Files.newDirectoryStream(Files.java:472)
at java.base/java.nio.file.FileTreeWalker.visit(FileTreeWalker.java:300)
at java.base/java.nio.file.FileTreeWalker.walk(FileTreeWalker.java:322)
at
java.base/java.nio.file.FileTreeIterator.<init>(FileTreeIterator.java:71)
at java.base/java.nio.file.Files.walk(Files.java:3825)
at org.apache.commons.io.file.PathUtils.walk(PathUtils.java:1044)
at org.apache.commons.io.FileUtils.streamFiles(FileUtils.java:2971)
at org.apache.commons.io.FileUtils.iterateFiles(FileUtils.java:1925)
... 1 more{code}
--
This message was sent by Atlassian Jira
(v8.20.1#820001)