diff options
| author | Samuel Tardieu <sam@rfc1149.net> | 2014-01-19 22:08:35 +0100 |
|---|---|---|
| committer | Samuel Tardieu <sam@rfc1149.net> | 2014-01-19 22:08:35 +0100 |
| commit | 69749c97db51b8c7116acc14cda415ad2d39eac0 (patch) | |
| tree | 1b69ccc81954d4a00b4e2b79fcdf967af16c8617 | |
| parent | d9ccff55000b8afd06310b7c80b59dae4e738aac (diff) | |
| download | cgeo-69749c97db51b8c7116acc14cda415ad2d39eac0.zip cgeo-69749c97db51b8c7116acc14cda415ad2d39eac0.tar.gz cgeo-69749c97db51b8c7116acc14cda415ad2d39eac0.tar.bz2 | |
Prevent concurrent writings of the same file
| -rw-r--r-- | main/src/cgeo/geocaching/files/LocalStorage.java | 11 |
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); } |
