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)

Reply via email to