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.
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.
- duplicates
-
JDK-4742723 File.mkdirs() fails due to race condition
- Closed
- relates to
-
JDK-6413452 DefaultFileManager may throw "could not create parent directories" in concurrent execution
- Closed