JDK-6492293 : Race condition in File.mkdirs
  • Type: Bug
  • Component: core-libs
  • Sub-Component: java.io
  • Affected Version: 6
  • Priority: P2
  • Status: Closed
  • Resolution: Duplicate
  • OS: generic
  • CPU: generic
  • Submitted: 2006-11-10
  • Updated: 2010-04-02
  • Resolved: 2006-11-10
Related Reports
Duplicate :  
Relates :  
Description
Apparently java.io.File.mkdirs has a race condition that causes it to fail
if a parent directory is created by a different thread.

        if (mkdir()) {
            return true;
        }
// step one
        File canonFile = null;
        try {
            canonFile = getCanonicalFile();
        } catch (IOException e) {
            return false;
        }
        String parent = canonFile.getParent();
        return (parent != null) &&
               (new File(parent, fs.prefixLength(parent)).mkdirs() &&
// step two
                                    canonFile.mkdir());

If the parent file is created between step one and step two, the method
will fail to create the child.