aboutsummaryrefslogtreecommitdiffstats
path: root/main/src
diff options
context:
space:
mode:
authorSamuel Tardieu <sam@rfc1149.net>2014-01-19 22:08:35 +0100
committerSamuel Tardieu <sam@rfc1149.net>2014-01-19 22:08:35 +0100
commit69749c97db51b8c7116acc14cda415ad2d39eac0 (patch)
tree1b69ccc81954d4a00b4e2b79fcdf967af16c8617 /main/src
parentd9ccff55000b8afd06310b7c80b59dae4e738aac (diff)
downloadcgeo-69749c97db51b8c7116acc14cda415ad2d39eac0.zip
cgeo-69749c97db51b8c7116acc14cda415ad2d39eac0.tar.gz
cgeo-69749c97db51b8c7116acc14cda415ad2d39eac0.tar.bz2
Prevent concurrent writings of the same file
Diffstat (limited to 'main/src')
-rw-r--r--main/src/cgeo/geocaching/files/LocalStorage.java11
1 files changed, 7 insertions, 4 deletions
diff --git a/main/src/cgeo/geocaching/files/LocalStorage.java b/main/src/cgeo/geocaching/files/LocalStorage.java
index 133f39a..3dcb200 100644
--- a/main/src/cgeo/geocaching/files/LocalStorage.java
+++ b/main/src/cgeo/geocaching/files/LocalStorage.java
@@ -275,15 +275,18 @@ public final class LocalStorage {
return false;
}
+
try {
try {
- final FileOutputStream fos = new FileOutputStream(targetFile);
+ final File tempFile = File.createTempFile("download", null, targetFile.getParentFile());
+ final FileOutputStream fos = new FileOutputStream(tempFile);
final boolean written = copy(inputStream, fos);
fos.close();
- if (!written) {
- FileUtils.deleteIgnoringFailure(targetFile);
+ if (written) {
+ return tempFile.renameTo(targetFile);
}
- return written;
+ FileUtils.deleteIgnoringFailure(tempFile);
+ return false;
} finally {
IOUtils.closeQuietly(inputStream);
}